From 497814717e7fd2a8c8f7ef96ba1878e8de7e58a6 Mon Sep 17 00:00:00 2001 From: Kevin Day Date: Sun, 21 Aug 2022 21:22:38 -0500 Subject: [PATCH] Progress: Working on program related changes and fix version number. Continuing work in regards to making program related changes. I managed to miss another set of files that have version numbers. I should probably write a script to consistently handle this in the future to avoid these kinds of simple mistakes. Change the behavior of the color loaded to allow for more flexibility. The previous design was a quickly put togethor hardcoded approach. I want to get away from such practices. Add missing dependency in f_color. I am at a cross roads of flexibility and maintainability (as well as size). The practice of always having and using a typedef allows for great flexibility (allows for easy hacking/modifications). As per my practice, I should have explicit functions for allocating, deallocating, and similar functions. These waste space, consume time writing, and consume maintainance related time. I want to increase the maintainability of the project given that my current goals are far reaching. This means that I should switch to existing typedefs for any simple data type (except for special cases like strings and f_string_t). I am starting this conversion with f_color, using the uintX_t types rathe than custom types like f_color_mode_t. Start using enumerations over define macros. Make the console parameter processing functions more flexible by returning the decision at the index rather than the converted decision value. This allows for the caller to know which index is used. The caller can do more work based on this without having to do more looping. Add line_first_no and line_last_no standard parameters. These add more flexibility for special case scripting. Many core printing functions now do not print the leading new line. All programs must be updated accordingly. Add and document new console parameter initialization macros. Start a new style practice with the console arguments, based around these new macros. The f_file_stream_flush() should not need f_file_t parameter to be a pointer. The memory functions now return F_data_not in more situations that make sense. When size is 0 for allocation functions, this should be a paameter error when doing parameter checking. The pointer should be allowed to be NULL when allocating. Some fll_program functions are supposed to be using private functions due to internal usage. The standard help options now have a standard printing function. The fll_program_parameter_process() is removed. Instead, call f_console_parameter_process directly. The color context handling is moved from the now deleted fll_program_parameter_process() into fll_program_parameter_process_context(). The fll_program_data_t now accepts a pointer to the environment variable array for representing the environment variables are start. The fll_program_data_t now uses flags rather than a boolean to represent program pipe (allowing for more than just input pipe, in theory). Add new status codes: - F_help - F_help_not Major work is completed into making the utf8 program more flexible. - Moved all parameter processing into utf8_setting_load() and provide utf8_setting_t. - This allows for callers to manually configure the settings without performing parameter processing if so desired. - Re-design printing logic to handle the line_first_no and line_last_no parameters. - The status used by the utf8_main() is now in utf8_setting_t. Related changes have been lazily applied to all other programs. Once I am finished with utf8 (which I might already be), then I will beging moving to each next program. --- build/level_2/settings | 2 +- build/monolithic/settings | 2 +- level_0/f_account/data/build/settings | 2 +- level_0/f_account/data/build/settings-mocks | 2 +- level_0/f_account/data/build/settings-tests | 2 +- level_0/f_capability/data/build/settings | 2 +- .../f_capability/data/build/settings-mocks | 2 +- .../f_capability/data/build/settings-tests | 2 +- level_0/f_color/c/color.c | 137 ++++- level_0/f_color/c/color.h | 15 +- level_0/f_color/c/color/common.h | 124 ++-- level_0/f_color/c/private-color.c | 12 +- level_0/f_color/data/build/dependencies | 1 + level_0/f_color/data/build/settings | 4 +- level_0/f_color/data/build/settings-mocks | 2 +- level_0/f_color/data/build/settings-tests | 2 +- level_0/f_console/c/console.c | 90 +-- level_0/f_console/c/console.h | 12 +- level_0/f_console/c/console/common.c | 4 + level_0/f_console/c/console/common.h | 266 +++++---- level_0/f_console/data/build/settings | 2 +- level_0/f_console/data/build/settings-tests | 2 +- level_0/f_control_group/data/build/settings | 2 +- .../f_control_group/data/build/settings-tests | 2 +- level_0/f_conversion/data/build/settings | 2 +- .../f_conversion/data/build/settings-mocks | 2 +- .../f_conversion/data/build/settings-tests | 2 +- level_0/f_directory/data/build/settings | 2 +- level_0/f_directory/data/build/settings-mocks | 2 +- level_0/f_directory/data/build/settings-tests | 2 +- level_0/f_environment/data/build/settings | 2 +- .../f_environment/data/build/settings-mocks | 2 +- .../f_environment/data/build/settings-tests | 2 +- level_0/f_execute/data/build/settings | 2 +- level_0/f_execute/data/build/settings-tests | 2 +- level_0/f_file/c/file.c | 9 +- level_0/f_file/c/file.h | 2 +- level_0/f_file/data/build/settings | 2 +- level_0/f_file/data/build/settings-mocks | 2 +- level_0/f_file/data/build/settings-tests | 2 +- level_0/f_fss/data/build/settings | 2 +- level_0/f_fss/data/build/settings-mocks | 2 +- level_0/f_fss/data/build/settings-tests | 2 +- level_0/f_iki/data/build/settings | 2 +- level_0/f_iki/data/build/settings-tests | 2 +- level_0/f_limit/data/build/settings | 2 +- level_0/f_limit/data/build/settings-mocks | 2 +- level_0/f_limit/data/build/settings-tests | 2 +- level_0/f_memory/c/memory.c | 52 +- level_0/f_memory/c/memory.h | 12 +- level_0/f_memory/c/private-memory.c | 22 +- level_0/f_memory/data/build/settings | 2 +- level_0/f_path/data/build/settings | 2 +- level_0/f_path/data/build/settings-mocks | 2 +- level_0/f_path/data/build/settings-tests | 2 +- level_0/f_pipe/data/build/settings | 2 +- level_0/f_pipe/data/build/settings-mocks | 2 +- level_0/f_pipe/data/build/settings-tests | 2 +- level_0/f_print/c/print.c | 20 +- level_0/f_print/data/build/settings | 2 +- level_0/f_print/data/build/settings-mocks | 2 +- level_0/f_print/data/build/settings-tests | 2 +- level_0/f_serialize/data/build/settings | 2 +- level_0/f_serialize/data/build/settings-mocks | 2 +- level_0/f_serialize/data/build/settings-tests | 2 +- level_0/f_signal/data/build/settings | 2 +- level_0/f_signal/data/build/settings-mocks | 2 +- level_0/f_signal/data/build/settings-tests | 2 +- level_0/f_socket/data/build/settings | 2 +- level_0/f_socket/data/build/settings-mocks | 2 +- level_0/f_socket/data/build/settings-tests | 2 +- level_0/f_status/c/status.h | 2 + level_0/f_status/data/build/settings | 2 +- level_0/f_status_string/c/status_string.c | 2 + level_0/f_status_string/c/status_string.h | 6 + level_0/f_status_string/data/build/settings | 2 +- .../f_status_string/data/build/settings-tests | 2 +- .../tests/unit/c/test-status_string-to.c | 6 +- level_0/f_string/c/string/common.h | 6 +- level_0/f_string/c/string/private-dynamic.c | 16 +- level_0/f_string/data/build/settings | 2 +- level_0/f_string/data/build/settings-tests | 2 +- level_0/f_thread/data/build/settings | 2 +- level_0/f_thread/data/build/settings-mocks | 2 +- level_0/f_thread/data/build/settings-tests | 2 +- level_0/f_type/data/build/settings | 2 +- level_0/f_type_array/data/build/settings | 2 +- level_0/f_utf/data/build/settings | 2 +- level_0/f_utf/data/build/settings-tests | 2 +- level_1/fl_control_group/c/control_group.c | 2 +- level_1/fl_control_group/data/build/settings | 2 +- level_1/fl_conversion/data/build/settings | 2 +- level_1/fl_directory/data/build/settings | 2 +- level_1/fl_environment/data/build/settings | 2 +- level_1/fl_execute/data/build/settings | 2 +- level_1/fl_fss/data/build/settings | 2 +- level_1/fl_iki/data/build/settings | 2 +- level_1/fl_print/data/build/settings | 2 +- level_1/fl_signal/data/build/settings | 2 +- level_1/fl_string/data/build/settings | 2 +- level_1/fl_utf/data/build/settings | 2 +- level_1/fl_utf_file/data/build/settings | 2 +- level_2/fll_control_group/data/build/settings | 2 +- level_2/fll_error/c/error.c | 96 +-- level_2/fll_error/c/private-error.c | 30 +- level_2/fll_error/c/private-error.h | 4 +- level_2/fll_error/data/build/settings | 2 +- level_2/fll_execute/data/build/settings | 2 +- level_2/fll_file/data/build/settings | 2 +- level_2/fll_fss/data/build/settings | 2 +- .../fll_fss_status_string/data/build/settings | 2 +- level_2/fll_iki/data/build/settings | 2 +- level_2/fll_path/data/build/settings | 2 +- level_2/fll_print/data/build/settings | 2 +- level_2/fll_program/c/private-program.c | 69 +++ level_2/fll_program/c/private-program.h | 94 +++ level_2/fll_program/c/program.c | 205 +++---- level_2/fll_program/c/program.h | 71 ++- level_2/fll_program/c/program/common.h | 9 +- level_2/fll_program/data/build/settings | 4 +- level_2/fll_status_string/c/status_string.c | 12 + level_2/fll_status_string/data/build/settings | 2 +- .../data/build/settings-tests | 2 +- .../tests/unit/c/test-status_string-from.c | 6 +- level_3/byte_dump/c/byte_dump.c | 161 +++--- level_3/byte_dump/c/byte_dump.h | 2 +- level_3/byte_dump/c/common.h | 59 +- level_3/byte_dump/c/main.c | 8 +- level_3/byte_dump/data/build/settings | 2 +- level_3/control/c/common.h | 35 +- level_3/control/c/control.c | 116 ++-- level_3/control/c/control.h | 2 +- level_3/control/c/main.c | 8 +- level_3/control/c/private-control.c | 2 +- level_3/control/data/build/settings | 2 +- level_3/controller/c/common.h | 50 +- level_3/controller/c/controller.c | 112 ++-- level_3/controller/c/controller.h | 2 +- .../c/controller/private-controller.c | 10 +- .../controller/c/entry/private-entry_print.c | 6 +- .../controller/c/lock/private-lock_print.c | 20 +- level_3/controller/c/main.c | 8 +- .../controller/c/rule/private-rule_print.c | 52 +- level_3/controller/data/build/settings | 2 +- level_3/fake/c/common.h | 65 ++- level_3/fake/c/fake.c | 122 ++-- level_3/fake/c/fake.h | 2 +- level_3/fake/c/main.c | 8 +- level_3/fake/c/private-build.c | 8 +- level_3/fake/c/private-fake.c | 10 +- level_3/fake/c/private-make-load_parameters.c | 6 +- level_3/fake/c/private-make-operate.c | 4 +- .../c/private-make-operate_process_type.c | 4 +- level_3/fake/c/private-print.c | 40 +- level_3/fake/c/private-skeleton.c | 4 +- level_3/fake/data/build/settings | 2 +- level_3/firewall/c/common.h | 37 +- level_3/firewall/c/firewall.c | 100 ++-- level_3/firewall/c/firewall.h | 2 +- level_3/firewall/c/main.c | 8 +- level_3/firewall/c/private-firewall.c | 8 +- level_3/firewall/data/build/settings | 2 +- level_3/fss_basic_list_read/c/common.h | 55 +- .../c/fss_basic_list_read.c | 121 ++-- .../c/fss_basic_list_read.h | 2 +- level_3/fss_basic_list_read/c/main.c | 8 +- .../fss_basic_list_read/data/build/settings | 2 +- level_3/fss_basic_list_write/c/common.h | 45 +- .../c/fss_basic_list_write.c | 117 ++-- .../c/fss_basic_list_write.h | 2 +- level_3/fss_basic_list_write/c/main.c | 8 +- .../fss_basic_list_write/data/build/settings | 2 +- level_3/fss_basic_read/c/common.h | 55 +- level_3/fss_basic_read/c/fss_basic_read.c | 119 ++-- level_3/fss_basic_read/c/fss_basic_read.h | 2 +- level_3/fss_basic_read/c/main.c | 8 +- level_3/fss_basic_read/data/build/settings | 2 +- level_3/fss_basic_write/c/common.h | 45 +- level_3/fss_basic_write/c/fss_basic_write.c | 117 ++-- level_3/fss_basic_write/c/fss_basic_write.h | 2 +- level_3/fss_basic_write/c/main.c | 8 +- level_3/fss_basic_write/data/build/settings | 2 +- level_3/fss_embedded_list_read/c/common.h | 55 +- .../c/fss_embedded_list_read.c | 121 ++-- .../c/fss_embedded_list_read.h | 2 +- level_3/fss_embedded_list_read/c/main.c | 8 +- .../fss_embedded_list_read/c/private-common.h | 9 +- .../data/build/settings | 2 +- level_3/fss_embedded_list_write/c/common.h | 45 +- .../c/fss_embedded_list_write.c | 117 ++-- .../c/fss_embedded_list_write.h | 2 +- level_3/fss_embedded_list_write/c/main.c | 8 +- .../data/build/settings | 2 +- level_3/fss_extended_list_read/c/common.h | 55 +- .../c/fss_extended_list_read.c | 119 ++-- .../c/fss_extended_list_read.h | 2 +- level_3/fss_extended_list_read/c/main.c | 8 +- .../data/build/settings | 2 +- level_3/fss_extended_list_write/c/common.h | 45 +- .../c/fss_extended_list_write.c | 117 ++-- .../c/fss_extended_list_write.h | 2 +- level_3/fss_extended_list_write/c/main.c | 8 +- .../data/build/settings | 2 +- level_3/fss_extended_read/c/common.h | 54 +- .../fss_extended_read/c/fss_extended_read.c | 119 ++-- .../fss_extended_read/c/fss_extended_read.h | 2 +- level_3/fss_extended_read/c/main.c | 8 +- level_3/fss_extended_read/data/build/settings | 2 +- level_3/fss_extended_write/c/common.h | 45 +- .../fss_extended_write/c/fss_extended_write.c | 117 ++-- .../fss_extended_write/c/fss_extended_write.h | 2 +- level_3/fss_extended_write/c/main.c | 8 +- .../fss_extended_write/data/build/settings | 2 +- level_3/fss_identify/c/common.h | 37 +- level_3/fss_identify/c/fss_identify.c | 118 ++-- level_3/fss_identify/c/fss_identify.h | 2 +- level_3/fss_identify/c/main.c | 8 +- level_3/fss_identify/data/build/settings | 2 +- level_3/fss_payload_read/c/common.h | 55 +- level_3/fss_payload_read/c/fss_payload_read.c | 119 ++-- level_3/fss_payload_read/c/fss_payload_read.h | 2 +- level_3/fss_payload_read/c/main.c | 8 +- level_3/fss_payload_read/data/build/settings | 2 +- level_3/fss_payload_write/c/common.h | 45 +- .../fss_payload_write/c/fss_payload_write.c | 117 ++-- .../fss_payload_write/c/fss_payload_write.h | 2 +- level_3/fss_payload_write/c/main.c | 8 +- level_3/fss_payload_write/data/build/settings | 2 +- level_3/fss_status_code/c/common.h | 35 +- level_3/fss_status_code/c/fss_status_code.c | 113 ++-- level_3/fss_status_code/c/fss_status_code.h | 2 +- level_3/fss_status_code/c/main.c | 8 +- level_3/fss_status_code/data/build/settings | 2 +- level_3/iki_read/c/common.h | 50 +- level_3/iki_read/c/iki_read.c | 127 ++-- level_3/iki_read/c/iki_read.h | 2 +- level_3/iki_read/c/main.c | 8 +- level_3/iki_read/data/build/settings | 2 +- level_3/iki_write/c/common.h | 37 +- level_3/iki_write/c/iki_write.c | 109 ++-- level_3/iki_write/c/iki_write.h | 2 +- level_3/iki_write/c/main.c | 8 +- level_3/iki_write/c/private-write.c | 2 +- level_3/iki_write/data/build/settings | 2 +- level_3/status_code/c/common.h | 35 +- level_3/status_code/c/main.c | 8 +- level_3/status_code/c/status_code.c | 113 ++-- level_3/status_code/c/status_code.h | 2 +- level_3/status_code/data/build/settings | 2 +- level_3/utf8/c/common.c | 346 +++++++++++ level_3/utf8/c/common.h | 208 +++++-- level_3/utf8/c/main.c | 28 +- level_3/utf8/c/print.c | 547 ++++++++++++++++++ level_3/utf8/c/print.h | 418 +++++++++++++ level_3/utf8/c/private-common.c | 9 - level_3/utf8/c/private-common.h | 62 -- level_3/utf8/c/private-print.c | 407 ------------- level_3/utf8/c/private-print.h | 265 --------- level_3/utf8/c/private-utf8.c | 42 +- level_3/utf8/c/private-utf8.h | 8 +- level_3/utf8/c/private-utf8_bytesequence.c | 61 +- level_3/utf8/c/private-utf8_bytesequence.h | 16 +- level_3/utf8/c/private-utf8_codepoint.c | 127 ++-- level_3/utf8/c/private-utf8_codepoint.h | 32 +- level_3/utf8/c/utf8.c | 516 ++++------------- level_3/utf8/c/utf8.h | 81 +-- level_3/utf8/data/build/settings | 7 +- 267 files changed, 4536 insertions(+), 4345 deletions(-) create mode 100644 level_2/fll_program/c/private-program.c create mode 100644 level_2/fll_program/c/private-program.h create mode 100644 level_3/utf8/c/print.c create mode 100644 level_3/utf8/c/print.h delete mode 100644 level_3/utf8/c/private-print.c delete mode 100644 level_3/utf8/c/private-print.h diff --git a/build/level_2/settings b/build/level_2/settings index 5f160875a..6d66025d5 100644 --- a/build/level_2/settings +++ b/build/level_2/settings @@ -30,7 +30,7 @@ build_sources_library fss_status_string.c build_sources_library iki.c private-iki.c build_sources_library path.c build_sources_library print.c -build_sources_library program.c program/common.c +build_sources_library program.c program/common.c private-program.c build_sources_library status_string.c build_sources_headers control_group.h diff --git a/build/monolithic/settings b/build/monolithic/settings index 21d7d4025..1c032a807 100644 --- a/build/monolithic/settings +++ b/build/monolithic/settings @@ -67,7 +67,7 @@ build_sources_library level_2/fss_status_string.c build_sources_library level_2/iki.c level_2/private-iki.c build_sources_library level_2/path.c build_sources_library level_2/print.c -build_sources_library level_2/program.c level_2/program/common.c +build_sources_library level_2/program.c level_2/program/common.c level_2/private-program.c build_sources_library level_2/status_string.c build_sources_library-monolithic level_0/thread.c level_0/private-thread.c level_0/thread/attribute.c level_0/thread/barrier.c level_0/thread/barrier_attribute.c level_0/thread/condition.c level_0/thread/condition_attribute.c level_0/thread/id.c level_0/thread/key.c level_0/thread/lock.c level_0/thread/lock_attribute.c level_0/thread/mutex.c level_0/thread/mutex_attribute.c level_0/thread/once.c level_0/thread/semaphore.c level_0/thread/set.c level_0/thread/spin.c diff --git a/level_0/f_account/data/build/settings b/level_0/f_account/data/build/settings index e510c61f4..4891ccbcb 100644 --- a/level_0/f_account/data/build/settings +++ b/level_0/f_account/data/build/settings @@ -3,7 +3,7 @@ build_name f_account version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_account/data/build/settings-mocks b/level_0/f_account/data/build/settings-mocks index c1967b3e6..232bfb09c 100644 --- a/level_0/f_account/data/build/settings-mocks +++ b/level_0/f_account/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_account version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_account/data/build/settings-tests b/level_0/f_account/data/build/settings-tests index b76b85873..c4d085e9a 100644 --- a/level_0/f_account/data/build/settings-tests +++ b/level_0/f_account/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_account version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_capability/data/build/settings b/level_0/f_capability/data/build/settings index 37c47e1d8..49b221ae2 100644 --- a/level_0/f_capability/data/build/settings +++ b/level_0/f_capability/data/build/settings @@ -3,7 +3,7 @@ build_name f_capability version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_capability/data/build/settings-mocks b/level_0/f_capability/data/build/settings-mocks index 38ced6558..62232e996 100644 --- a/level_0/f_capability/data/build/settings-mocks +++ b/level_0/f_capability/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_capability version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_capability/data/build/settings-tests b/level_0/f_capability/data/build/settings-tests index 3d4edea1c..ad78a69af 100644 --- a/level_0/f_capability/data/build/settings-tests +++ b/level_0/f_capability/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_capability version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_color/c/color.c b/level_0/f_color/c/color.c index 0fbbc9fda..11279f98e 100644 --- a/level_0/f_color/c/color.c +++ b/level_0/f_color/c/color.c @@ -6,11 +6,118 @@ extern "C" { #endif #ifndef _di_f_color_load_context_ - f_status_t f_color_load_context(const bool use_light_colors, f_color_context_t * const context) { + f_status_t f_color_load_context(const uint8_t mode, f_color_context_t * const context) { #ifndef _di_level_0_parameter_checking_ if (!context) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ + context->mode = mode; + + if (mode == f_color_mode_color_not_e) { + macro_f_color_t_set_none(context->list); + + context->format.begin = f_string_empty_s; + context->format.end = f_string_empty_s; + context->format.medium = f_string_empty_s; + + context->set.error = f_color_set_empty_s; + context->set.important = f_color_set_empty_s; + context->set.normal = f_color_set_empty_s; + context->set.normal_reset = f_color_set_empty_s; + context->set.notable = f_color_set_empty_s; + context->set.reset = f_color_set_empty_s; + context->set.standout = f_color_set_empty_s; + context->set.success = f_color_set_empty_s; + context->set.title = f_color_set_empty_s; + context->set.warning = f_color_set_empty_s; + + f_status_t status = F_none; + + if (context->error.size) { + status = f_string_dynamic_resize(0, &context->error); + if (F_status_is_error(status)) return status; + } + else { + context->error.used = 0; + } + + if (context->important.size) { + status = f_string_dynamic_resize(0, &context->important); + if (F_status_is_error(status)) return status; + } + else { + context->important.used = 0; + } + + if (context->normal.size) { + status = f_string_dynamic_resize(0, &context->normal); + if (F_status_is_error(status)) return status; + } + else { + context->normal.used = 0; + } + + if (context->normal_reset.size) { + status = f_string_dynamic_resize(0, &context->normal_reset); + if (F_status_is_error(status)) return status; + } + else { + context->normal_reset.used = 0; + } + + if (context->notable.size) { + status = f_string_dynamic_resize(0, &context->notable); + if (F_status_is_error(status)) return status; + } + else { + context->notable.used = 0; + } + + if (context->reset.size) { + status = f_string_dynamic_resize(0, &context->reset); + if (F_status_is_error(status)) return status; + } + else { + context->reset.used = 0; + } + + if (context->standout.size) { + status = f_string_dynamic_resize(0, &context->standout); + if (F_status_is_error(status)) return status; + } + else { + context->standout.used = 0; + } + + if (context->success.size) { + status = f_string_dynamic_resize(0, &context->success); + if (F_status_is_error(status)) return status; + } + else { + context->success.used = 0; + } + + if (context->title.size) { + status = f_string_dynamic_resize(0, &context->title); + if (F_status_is_error(status)) return status; + } + else { + context->title.used = 0; + } + + if (context->warning.size) { + status = f_string_dynamic_resize(0, &context->warning); + if (F_status_is_error(status)) return status; + } + else { + context->warning.used = 0; + } + + return F_none; + } + + if (mode != f_color_mode_dark_e && mode != f_color_mode_light_e) return F_data_not; + // Switch to the appropriate terminal color mode. { char *environment = getenv(f_color_terminal_name_s.string); @@ -41,7 +148,7 @@ extern "C" { status = private_f_color_save_1(context->format, context->list.bold, &context->notable); } - if (use_light_colors) { + if (mode == f_color_mode_light_e) { if (F_status_is_error_not(status)) { status = private_f_color_save_2(context->format, context->list.bold, context->list.blue, &context->title); } @@ -53,10 +160,6 @@ extern "C" { if (F_status_is_error_not(status)) { status = private_f_color_save_1(context->format, context->list.purple, &context->standout); } - - if (F_status_is_error_not(status)) { - context->mode = F_color_mode_light_d; - } } else { if (F_status_is_error_not(status)) { @@ -70,10 +173,6 @@ extern "C" { if (F_status_is_error_not(status)) { status = private_f_color_save_1(context->format, context->list.green, &context->standout); } - - if (F_status_is_error_not(status)) { - context->mode = F_color_mode_dark_d; - } } if (F_status_is_error_not(status)) { @@ -140,8 +239,10 @@ extern "C" { if (!buffer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - f_status_t status = f_string_dynamic_increase_by(format.begin.used + (format.medium.used * 2) + format.end.used + color1.used + color2.used + color3.used + 1, buffer); - if (F_status_is_error(status)) return status; + { + const f_status_t status = f_string_dynamic_increase_by(format.begin.used + (format.medium.used * 2) + format.end.used + color1.used + color2.used + color3.used + 1, buffer); + if (F_status_is_error(status)) return status; + } if (color1.used) { memcpy(buffer->string + buffer->used, color1.string, sizeof(f_char_t) * color1.used); @@ -191,8 +292,10 @@ extern "C" { if (!buffer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - f_status_t status = f_string_dynamic_increase_by(format.begin.used + (format.medium.used * 3) + format.end.used + color1.used + color2.used + color3.used + color4.used + 1, buffer); - if (F_status_is_error(status)) return status; + { + const f_status_t status = f_string_dynamic_increase_by(format.begin.used + (format.medium.used * 3) + format.end.used + color1.used + color2.used + color3.used + color4.used + 1, buffer); + if (F_status_is_error(status)) return status; + } if (color1.used) { memcpy(buffer->string + buffer->used, color1.string, sizeof(f_char_t) * color1.used); @@ -254,8 +357,10 @@ extern "C" { if (!buffer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - f_status_t status = f_string_dynamic_increase_by(format.begin.used + (format.medium.used * 4) + format.end.used + color1.used + color2.used + color3.used + color4.used + color5.used + 1, buffer); - if (F_status_is_error(status)) return status; + { + const f_status_t status = f_string_dynamic_increase_by(format.begin.used + (format.medium.used * 4) + format.end.used + color1.used + color2.used + color3.used + color4.used + color5.used + 1, buffer); + if (F_status_is_error(status)) return status; + } if (format.begin.used) { memcpy(buffer->string + buffer->used, format.begin.string, sizeof(f_char_t) * format.begin.used); diff --git a/level_0/f_color/c/color.h b/level_0/f_color/c/color.h index 8292d011b..29a5606b7 100644 --- a/level_0/f_color/c/color.h +++ b/level_0/f_color/c/color.h @@ -22,6 +22,7 @@ #include #include #include +#include #include // FLL-0 color includes. @@ -37,16 +38,22 @@ extern "C" { * This will handle the difference betweem xorg terminals and linux consoles. * If you wish to use non-standard colors either redefine this function or don't use it. * + * This only supports the following color modes: + * - f_color_mode_color_not_e + * - f_color_mode_dark_e + * - f_color_mode_light_e + * * The default/fallback behavior is f_color_xterminal. * - * @param use_light_colors - * Set to F_true to use colors for light backgrounds. - * Set to F_false to use colors for dark backgrounds. + * @param mode + * The color mode to load. * @param context * The color context the load the color codes into. + * The context.mode is always set to the specified mode, even if it is not supported (except when there is an invalid parameter). * * @return * F_none on success. + * F_data_not on success but mode is f_color_mode_none_e or not a supported mode. * * F_parameter (with error bit) if a parameter is invalid. * @@ -57,7 +64,7 @@ extern "C" { * @see f_string_dynamic_increase_by() */ #ifndef _di_f_color_load_context_ - extern f_status_t f_color_load_context(const bool use_light_colors, f_color_context_t * const context); + extern f_status_t f_color_load_context(const uint8_t mode, f_color_context_t * const context); #endif // _di_f_color_load_context_ /** diff --git a/level_0/f_color/c/color/common.h b/level_0/f_color/c/color/common.h index d94073df1..52099f21c 100644 --- a/level_0/f_color/c/color/common.h +++ b/level_0/f_color/c/color/common.h @@ -31,7 +31,7 @@ extern "C" { /** * Define codes representing color sets. * - * F_color_code_*: + * F_color_code_*_e: * - none: No color code set defined. * - linux: Linux terminal color code set. * - xterminal: X-Terminal color code set. @@ -39,9 +39,13 @@ extern "C" { #ifndef _di_f_color_code_t_ typedef f_char_t f_color_code_t; - #define F_color_code_none_d 0 - #define F_color_code_linux_d 1 - #define F_color_code_xterminal_d 2 + enum { + f_color_code_none_e = 0, + f_color_code_linux_e, + f_color_code_xterminal_e, + }; + + #define f_color_code_t_initialize f_color_code_none_e #endif // _di_f_color_code_t_ /** @@ -242,23 +246,21 @@ extern "C" { #endif // _di_f_color_string_s_ /** - * Specify color modes. - * * Color modes communicate how the color is supposed to be. * - * F_color_mode_*: - * - none: define designates that there is no assigned mode (the mode is undefined). - * - no_color: define designates that the color mode is set to no color (disable colors). - * - dark: define designates that the color mode is for dark backgrounds. - * - light: define designates that the color mode is for light backgrounds. + * f_color_mode_*_e: + * - none: Designates that there is no assigned mode (the mode is undefined). + * - color_not: Designates that the color mode is set to no color (disable colors). + * - dark: Designates that the color mode is for dark backgrounds. + * - light: Designates that the color mode is for light backgrounds. */ #ifndef _di_f_color_mode_t_ - typedef uint8_t f_color_mode_t; - - #define F_color_mode_none_d 0 - #define F_color_mode_no_color_d 1 - #define F_color_mode_dark_d 2 - #define F_color_mode_light_d 3 + enum { + f_color_mode_none_e = 0, + f_color_mode_color_not_e, + f_color_mode_dark_e, + f_color_mode_light_e, + }; #endif // _di_f_color_mode_t_ /** @@ -524,45 +526,45 @@ extern "C" { f_color_string_code_bright_white_bg_s, \ } - #define macro_f_color_t_clear(color) \ - macro_f_string_static_t_clear(color.reset) \ - macro_f_string_static_t_clear(color.bold) \ - macro_f_string_static_t_clear(color.underline) \ - macro_f_string_static_t_clear(color.blink) \ - macro_f_string_static_t_clear(color.reverse) \ - macro_f_string_static_t_clear(color.conceal) \ - macro_f_string_static_t_clear(color.black) \ - macro_f_string_static_t_clear(color.red) \ - macro_f_string_static_t_clear(color.green) \ - macro_f_string_static_t_clear(color.yellow) \ - macro_f_string_static_t_clear(color.blue) \ - macro_f_string_static_t_clear(color.purple) \ - macro_f_string_static_t_clear(color.teal) \ - macro_f_string_static_t_clear(color.white) \ - macro_f_string_static_t_clear(color.black_bg) \ - macro_f_string_static_t_clear(color.red_bg) \ - macro_f_string_static_t_clear(color.green_bg) \ - macro_f_string_static_t_clear(color.yellow_bg) \ - macro_f_string_static_t_clear(color.blue_bg) \ - macro_f_string_static_t_clear(color.purple_bg) \ - macro_f_string_static_t_clear(color.teal_bg) \ - macro_f_string_static_t_clear(color.white_bg) \ - macro_f_string_static_t_clear(color.bright_black) \ - macro_f_string_static_t_clear(color.bright_red) \ - macro_f_string_static_t_clear(color.bright_green) \ - macro_f_string_static_t_clear(color.bright_yellow) \ - macro_f_string_static_t_clear(color.bright_blue) \ - macro_f_string_static_t_clear(color.bright_purple) \ - macro_f_string_static_t_clear(color.bright_teal) \ - macro_f_string_static_t_clear(color.bright_white) \ - macro_f_string_static_t_clear(color.bright_black_bg) \ - macro_f_string_static_t_clear(color.bright_red_bg) \ - macro_f_string_static_t_clear(color.bright_green_bg) \ - macro_f_string_static_t_clear(color.bright_yellow_bg) \ - macro_f_string_static_t_clear(color.bright_blue_bg) \ - macro_f_string_static_t_clear(color.bright_purple_bg) \ - macro_f_string_static_t_clear(color.bright_teal_bg) \ - macro_f_string_static_t_clear(color.bright_white_bg) + #define macro_f_color_t_set_none(color) \ + color.reset = f_string_empty_s; \ + color.bold = f_string_empty_s; \ + color.underline = f_string_empty_s; \ + color.blink = f_string_empty_s; \ + color.reverse = f_string_empty_s; \ + color.conceal = f_string_empty_s; \ + color.black = f_string_empty_s; \ + color.red = f_string_empty_s; \ + color.green = f_string_empty_s; \ + color.yellow = f_string_empty_s; \ + color.blue = f_string_empty_s; \ + color.purple = f_string_empty_s; \ + color.teal = f_string_empty_s; \ + color.white = f_string_empty_s; \ + color.black_bg = f_string_empty_s; \ + color.red_bg = f_string_empty_s; \ + color.green_bg = f_string_empty_s; \ + color.yellow_bg = f_string_empty_s; \ + color.blue_bg = f_string_empty_s; \ + color.purple_bg = f_string_empty_s; \ + color.teal_bg = f_string_empty_s; \ + color.white_bg = f_string_empty_s; \ + color.bright_black = f_string_empty_s; \ + color.bright_red = f_string_empty_s; \ + color.bright_green = f_string_empty_s; \ + color.bright_yellow = f_string_empty_s; \ + color.bright_blue = f_string_empty_s; \ + color.bright_purple = f_string_empty_s; \ + color.bright_teal = f_string_empty_s; \ + color.bright_white = f_string_empty_s; \ + color.bright_black_bg = f_string_empty_s; \ + color.bright_red_bg = f_string_empty_s; \ + color.bright_green_bg = f_string_empty_s; \ + color.bright_yellow_bg = f_string_empty_s; \ + color.bright_blue_bg = f_string_empty_s; \ + color.bright_purple_bg = f_string_empty_s; \ + color.bright_teal_bg = f_string_empty_s; \ + color.bright_white_bg = f_string_empty_s; #define macro_f_color_t_set_linux(color) \ color.reset = f_color_string_code_reset_s; \ @@ -732,7 +734,6 @@ extern "C" { macro_f_color_set_t_clear(set.success) \ macro_f_color_set_t_clear(set.title) \ macro_f_color_set_t_clear(set.warning) - #endif // _di_f_color_set_context_t_ /** @@ -760,7 +761,7 @@ extern "C" { typedef struct { f_color_t list; f_color_format_t format; - f_color_mode_t mode; + uint8_t mode; f_color_set_context_t set; f_string_dynamic_t error; @@ -775,10 +776,11 @@ extern "C" { f_string_dynamic_t warning; } f_color_context_t; + // @todo create allocate/clear/etc... functions. #define f_color_context_t_initialize { \ f_color_t_initialize_linux, \ f_color_format_t_initialize_linux, \ - F_color_mode_none_d, \ + f_color_mode_none_e, \ f_color_set_context_t_initialize, \ f_string_dynamic_t_initialize, \ f_string_dynamic_t_initialize, \ @@ -793,9 +795,9 @@ extern "C" { } #define macro_f_color_context_t_clear(context) \ - macro_f_color_t_clear(context.list) \ + macro_f_color_t_set_none(context.list) \ macro_f_color_format_t_clear(context.format) \ - context.mode = F_color_mode_none_d; \ + context.mode = f_color_mode_none_e; \ macro_f_color_set_context_t_clear(context.set) \ macro_f_string_dynamic_t_clear(context.error) \ macro_f_string_dynamic_t_clear(context.important) \ diff --git a/level_0/f_color/c/private-color.c b/level_0/f_color/c/private-color.c index 8dc843a5e..919994b33 100644 --- a/level_0/f_color/c/private-color.c +++ b/level_0/f_color/c/private-color.c @@ -8,8 +8,10 @@ extern "C" { #if !defined(_di_f_color_load_context_) || !defined(_di_f_color_save_1_) f_status_t private_f_color_save_1(const f_color_format_t format, const f_string_static_t color1, f_string_dynamic_t * const buffer) { - f_status_t status = f_string_dynamic_increase_by(format.begin.used + format.end.used + color1.used + 1, buffer); - if (F_status_is_error(status)) return status; + { + const f_status_t status = f_string_dynamic_increase_by(format.begin.used + format.end.used + color1.used + 1, buffer); + if (F_status_is_error(status)) return status; + } if (format.begin.used) { memcpy(buffer->string + buffer->used, format.begin.string, sizeof(f_char_t) * format.begin.used); @@ -38,8 +40,10 @@ extern "C" { #if !defined(_di_f_color_load_context_) || !defined(_di_f_color_save_2_) f_status_t private_f_color_save_2(const f_color_format_t format, const f_string_static_t color1, const f_string_static_t color2, f_string_dynamic_t * const buffer) { - f_status_t status = f_string_dynamic_increase_by(format.begin.used + format.medium.used + format.end.used + color1.used + color2.used + 1, buffer); - if (F_status_is_error(status)) return status; + { + const f_status_t status = f_string_dynamic_increase_by(format.begin.used + format.medium.used + format.end.used + color1.used + color2.used + 1, buffer); + if (F_status_is_error(status)) return status; + } if (format.begin.used) { memcpy(buffer->string + buffer->used, format.begin.string, sizeof(f_char_t) * format.begin.used); diff --git a/level_0/f_color/data/build/dependencies b/level_0/f_color/data/build/dependencies index d7982451c..0acb0c93d 100644 --- a/level_0/f_color/data/build/dependencies +++ b/level_0/f_color/data/build/dependencies @@ -4,3 +4,4 @@ f_type f_status f_memory f_string +f_type_array diff --git a/level_0/f_color/data/build/settings b/level_0/f_color/data/build/settings index a149d2c26..598417375 100644 --- a/level_0/f_color/data/build/settings +++ b/level_0/f_color/data/build/settings @@ -3,7 +3,7 @@ build_name f_color version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor @@ -18,7 +18,7 @@ build_indexer_arguments rcs build_language c build_libraries -lc -build_libraries-individual -lf_memory -lf_string +build_libraries-individual -lf_memory -lf_string -lf_type_array build_sources_library color.c private-color.c color/common.c diff --git a/level_0/f_color/data/build/settings-mocks b/level_0/f_color/data/build/settings-mocks index 45cdebcc7..37cb0da39 100644 --- a/level_0/f_color/data/build/settings-mocks +++ b/level_0/f_color/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_color version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_color/data/build/settings-tests b/level_0/f_color/data/build/settings-tests index 2631bb4fa..e66fc018e 100644 --- a/level_0/f_color/data/build/settings-tests +++ b/level_0/f_color/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_color version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_console/c/console.c b/level_0/f_console/c/console.c index dbaf73e30..1c405dca7 100644 --- a/level_0/f_console/c/console.c +++ b/level_0/f_console/c/console.c @@ -10,9 +10,7 @@ extern "C" { if (!environment) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_f - if (!arguments.envp) { - return F_data_not; - } + if (!arguments.envp) return F_data_not; f_array_length_t total = 0; @@ -20,9 +18,7 @@ extern "C" { ++total; } // while - if (!total) { - return F_data_not; - } + if (!total) return F_data_not; { const f_status_t status = f_string_maps_increase_by(total, environment); @@ -114,47 +110,37 @@ extern "C" { #endif // _di_f_console_identify_ #ifndef _di_f_console_parameter_prioritize_left_ - f_status_t f_console_parameter_prioritize_left(const f_console_parameters_t parameters, const f_console_parameter_ids_t choices, f_console_parameter_id_t * const decision) { + f_status_t f_console_parameter_prioritize_left(const f_console_parameters_t parameters, const f_uint16s_t choices, f_array_length_t * const decision) { #ifndef _di_level_0_parameter_checking_ if (!decision) return F_status_set_error(F_parameter); - if (!choices.id) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!choices.used) { - return F_data_not; - } - - if (!parameters.used) { - return F_data_not; - } + if (!choices.used) return F_data_not; + if (!parameters.used) return F_data_not; f_array_length_t location = 0; f_array_length_t location_sub = 0; - f_console_parameter_id_t priority = 0; + f_array_length_t priority = 0; for (f_array_length_t i = 0; i < choices.used; ++i) { - if (choices.id[i] > parameters.used) { - return F_status_set_error(F_parameter); - } + if (choices.array[i] > parameters.used) return F_status_set_error(F_parameter); - if (parameters.array[choices.id[i]].result == f_console_result_found_e) { - if (!location || parameters.array[choices.id[i]].location < location) { - location = parameters.array[choices.id[i]].location; - location_sub = parameters.array[choices.id[i]].location_sub; - priority = choices.id[i]; + if (parameters.array[choices.array[i]].result == f_console_result_found_e) { + if (!location || parameters.array[choices.array[i]].location < location) { + location = parameters.array[choices.array[i]].location; + location_sub = parameters.array[choices.array[i]].location_sub; + priority = i; } - else if (parameters.array[choices.id[i]].location == location && parameters.array[choices.id[i]].location_sub < location_sub) { - location_sub = parameters.array[choices.id[i]].location_sub; - priority = choices.id[i]; + else if (parameters.array[choices.array[i]].location == location && parameters.array[choices.array[i]].location_sub < location_sub) { + location_sub = parameters.array[choices.array[i]].location_sub; + priority = i; } } } // for // The first parameter location (argc = 0) is the program name, therefore if the location is 0, then no matches were found. - if (!location) { - return F_data_not; - } + if (!location) return F_data_not; *decision = priority; @@ -163,47 +149,37 @@ extern "C" { #endif // _di_f_console_parameter_prioritize_left_ #ifndef _di_f_console_parameter_prioritize_right_ - f_status_t f_console_parameter_prioritize_right(const f_console_parameters_t parameters, const f_console_parameter_ids_t choices, f_console_parameter_id_t * const decision) { + f_status_t f_console_parameter_prioritize_right(const f_console_parameters_t parameters, const f_uint16s_t choices, f_array_length_t * const decision) { #ifndef _di_level_0_parameter_checking_ if (!decision) return F_status_set_error(F_parameter); - if (!choices.id) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!choices.used) { - return F_data_not; - } - - if (!parameters.used) { - return F_data_not; - } + if (!choices.used) return F_data_not; + if (!parameters.used) return F_data_not; f_array_length_t location = 0; f_array_length_t location_sub = 0; - f_console_parameter_id_t priority = 0; + f_array_length_t priority = 0; for (f_array_length_t i = 0; i < choices.used; ++i) { - if (choices.id[i] > parameters.used) { - return F_status_set_error(F_parameter); - } + if (choices.array[i] > parameters.used) return F_status_set_error(F_parameter); - if (parameters.array[choices.id[i]].result == f_console_result_found_e) { - if (!location || parameters.array[choices.id[i]].location > location) { - location = parameters.array[choices.id[i]].location; - location_sub = parameters.array[choices.id[i]].location_sub; - priority = choices.id[i]; + if (parameters.array[choices.array[i]].result == f_console_result_found_e) { + if (!location || parameters.array[choices.array[i]].location > location) { + location = parameters.array[choices.array[i]].location; + location_sub = parameters.array[choices.array[i]].location_sub; + priority = i; } - else if (parameters.array[choices.id[i]].location == location && parameters.array[choices.id[i]].location_sub > location_sub) { - location_sub = parameters.array[choices.id[i]].location_sub; - priority = choices.id[i]; + else if (parameters.array[choices.array[i]].location == location && parameters.array[choices.array[i]].location_sub > location_sub) { + location_sub = parameters.array[choices.array[i]].location_sub; + priority = i; } } } // for // The first parameter location (argc = 0) is the program name, therefore if the location is 0, then no matches were found. - if (!location) { - return F_data_not; - } + if (!location) return F_data_not; *decision = priority; @@ -219,14 +195,12 @@ extern "C" { parameters->arguments.used = 0; - if (!arguments.argc || !arguments.argv || !arguments.argv[0]) { - return F_data_not; - } + if (!arguments.argc || !arguments.argv || !arguments.argv[0]) return F_data_not; f_status_t status = f_string_dynamics_increase_by(arguments.argc, ¶meters->arguments); if (F_status_is_error(status)) return status; - // Append the program name parameter. + // Append the program name parameter as a static string. parameters->arguments.array[parameters->arguments.used].string = arguments.argv[0]; parameters->arguments.array[parameters->arguments.used].used = strnlen(arguments.argv[0], F_console_parameter_size_d); parameters->arguments.array[parameters->arguments.used++].size = 0; diff --git a/level_0/f_console/c/console.h b/level_0/f_console/c/console.h index 33129d68b..1a1ef5897 100644 --- a/level_0/f_console/c/console.h +++ b/level_0/f_console/c/console.h @@ -86,17 +86,17 @@ extern "C" { * An array of numeric ids, each representing a parameter within the parameters variable. * The order does not matter. * @param decision - * The resulting decision. + * The location in the choices array representing the decision. * If none of the parameters are found, then this will not be updated (therefore it is safe to have it pre-initialized to the default). * * @return * F_none on success. - * F_data_not if no parameters were found. + * F_data_not if no parameters were matched with the available choices. * * F_parameter (with error bit) if a parameter is invalid. */ #ifndef _di_f_console_parameter_prioritize_left_ - extern f_status_t f_console_parameter_prioritize_left(const f_console_parameters_t parameters, const f_console_parameter_ids_t choices, f_console_parameter_id_t * const decision); + extern f_status_t f_console_parameter_prioritize_left(const f_console_parameters_t parameters, const f_uint16s_t choices, f_array_length_t * const decision); #endif // _di_f_console_parameter_prioritize_left_ /** @@ -117,17 +117,17 @@ extern "C" { * An array of numeric ids, each representing a parameter within the parameters variable. * The order does not matter. * @param decision - * The resulting decision. + * The location in the choices array representing the decision. * If none of the parameters are found, then this will not be updated (therefore it is safe to have it pre-initialized to the default). * * @return * F_none on success. - * F_data_not if no parameters were found. + * F_data_not if no parameters were matched with the available choices. * * F_parameter (with error bit) if a parameter is invalid. */ #ifndef _di_f_console_parameter_prioritize_right_ - extern f_status_t f_console_parameter_prioritize_right(const f_console_parameters_t parameters, const f_console_parameter_ids_t choices, f_console_parameter_id_t * const decision); + extern f_status_t f_console_parameter_prioritize_right(const f_console_parameters_t parameters, const f_uint16s_t choices, f_array_length_t * const decision); #endif // _di_f_console_parameter_prioritize_right_ /** diff --git a/level_0/f_console/c/console/common.c b/level_0/f_console/c/console/common.c index ea6a9e1f1..431417bf7 100644 --- a/level_0/f_console/c/console/common.c +++ b/level_0/f_console/c/console/common.c @@ -10,6 +10,8 @@ extern "C" { const f_string_static_t f_console_standard_short_error_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_error_s, 0, F_console_standard_short_error_s_length); const f_string_static_t f_console_standard_short_help_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_help_s, 0, F_console_standard_short_help_s_length); const f_string_static_t f_console_standard_short_light_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_light_s, 0, F_console_standard_short_light_s_length); + const f_string_static_t f_console_standard_short_line_first_no_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_line_first_no_s, 0, F_console_standard_short_line_first_no_s_length); + const f_string_static_t f_console_standard_short_line_last_no_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_line_last_no_s, 0, F_console_standard_short_line_last_no_s_length); const f_string_static_t f_console_standard_short_no_color_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_no_color_s, 0, F_console_standard_short_no_color_s_length); const f_string_static_t f_console_standard_short_normal_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_normal_s, 0, F_console_standard_short_normal_s_length); const f_string_static_t f_console_standard_short_quiet_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_short_quiet_s, 0, F_console_standard_short_quiet_s_length); @@ -23,6 +25,8 @@ extern "C" { const f_string_static_t f_console_standard_long_error_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_error_s, 0, F_console_standard_long_error_s_length); const f_string_static_t f_console_standard_long_help_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_help_s, 0, F_console_standard_long_help_s_length); const f_string_static_t f_console_standard_long_light_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_light_s, 0, F_console_standard_long_light_s_length); + const f_string_static_t f_console_standard_long_line_first_no_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_line_first_no_s, 0, F_console_standard_long_line_first_no_s_length); + const f_string_static_t f_console_standard_long_line_last_no_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_line_last_no_s, 0, F_console_standard_long_line_last_no_s_length); const f_string_static_t f_console_standard_long_no_color_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_no_color_s, 0, F_console_standard_long_no_color_s_length); const f_string_static_t f_console_standard_long_normal_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_normal_s, 0, F_console_standard_long_normal_s_length); const f_string_static_t f_console_standard_long_quiet_s = macro_f_string_static_t_initialize((f_string_t) F_console_standard_long_quiet_s, 0, F_console_standard_long_quiet_s_length); diff --git a/level_0/f_console/c/console/common.h b/level_0/f_console/c/console/common.h index 82a063b0b..c459873b4 100644 --- a/level_0/f_console/c/console/common.h +++ b/level_0/f_console/c/console/common.h @@ -82,14 +82,16 @@ extern "C" { * For example, a "+D +D" means more debug output than simply "+D". * * The verbosity interpretation used as the default for many of the level 3 programs in this process, is to treat verbosity modes as a scale from quiet to debug with quiet as the least verbose and debug as the most verbose. - * This is not stricly a requirement, but expect level 3 projects to work this way. + * This is not strictly a requirement, but expect level 3 projects to work this way. * * The following options are subjective in interpretation of the verbosity but are expected to be follow the general interpretation: - * - debug: Enable debugging, which will likely increase output verbosity. - * - error: Similar to quiet, except that error messages are printed (this is less verbose than "normal"). - * - normal: Use normal printing (don't use debug/quiet/verbose). - * - quiet: Decrease verbosity, print less, in some use cases this could mean printing nothing. - * - verbose: Increase verbosity, print more, in some use cases this could mean printing just about everything. + * - debug: Enable debugging, which will likely increase output verbosity. + * - error: Similar to quiet, except that error messages are printed (this is less verbose than "normal"). + * - normal: Use normal printing (don't use debug/quiet/verbose). + * - quiet: Decrease verbosity, print less, in some use cases this could mean printing nothing. + * - verbose: Increase verbosity, print more, in some use cases this could mean printing just about everything. + * - line_first_no: Don't print the first line if one is to be printed (useful in scripts) (may include error/warning messages). + * - line_last_no: Don't print the last line if one is to be printed (useful in scripts) (may include error/warning messages). * * The following are less subjective in interpretation but do allow some flexibility. * - dark: Do display color intended for dark backgrounds (often the default behavior) when printing to the console. Other contexts may be acceptable (such as voice inflections, or lack-thereof) for audio.) @@ -108,63 +110,73 @@ extern "C" { * - To avoid problems with the status code after a program is forcibly killed, the status_out environment variable should be cleared at program start. */ #ifndef _di_f_console_standard_s_ - #define F_console_standard_short_dark_s "d" - #define F_console_standard_short_debug_s "D" - #define F_console_standard_short_error_s "E" - #define F_console_standard_short_help_s "h" - #define F_console_standard_short_light_s "l" - #define F_console_standard_short_no_color_s "n" - #define F_console_standard_short_normal_s "N" - #define F_console_standard_short_quiet_s "Q" - #define F_console_standard_short_status_in_s "s" - #define F_console_standard_short_status_out_s "S" - #define F_console_standard_short_verbose_s "V" - #define F_console_standard_short_version_s "v" - - #define F_console_standard_short_dark_s_length 1 - #define F_console_standard_short_debug_s_length 1 - #define F_console_standard_short_error_s_length 1 - #define F_console_standard_short_help_s_length 1 - #define F_console_standard_short_light_s_length 1 - #define F_console_standard_short_no_color_s_length 1 - #define F_console_standard_short_normal_s_length 1 - #define F_console_standard_short_quiet_s_length 1 - #define F_console_standard_short_status_in_s_length 1 - #define F_console_standard_short_status_out_s_length 1 - #define F_console_standard_short_verbose_s_length 1 - #define F_console_standard_short_version_s_length 1 - - #define F_console_standard_long_dark_s "dark" - #define F_console_standard_long_debug_s "debug" - #define F_console_standard_long_error_s "error" - #define F_console_standard_long_help_s "help" - #define F_console_standard_long_light_s "light" - #define F_console_standard_long_no_color_s "no_color" - #define F_console_standard_long_normal_s "normal" - #define F_console_standard_long_quiet_s "quiet" - #define F_console_standard_long_status_in_s "status_in" - #define F_console_standard_long_status_out_s "status_out" - #define F_console_standard_long_verbose_s "verbose" - #define F_console_standard_long_version_s "version" - - #define F_console_standard_long_dark_s_length 4 - #define F_console_standard_long_debug_s_length 5 - #define F_console_standard_long_error_s_length 5 - #define F_console_standard_long_help_s_length 4 - #define F_console_standard_long_light_s_length 5 - #define F_console_standard_long_no_color_s_length 8 - #define F_console_standard_long_normal_s_length 6 - #define F_console_standard_long_quiet_s_length 5 - #define F_console_standard_long_status_in_s_length 9 - #define F_console_standard_long_status_out_s_length 10 - #define F_console_standard_long_verbose_s_length 7 - #define F_console_standard_long_version_s_length 7 + #define F_console_standard_short_dark_s "d" + #define F_console_standard_short_debug_s "D" + #define F_console_standard_short_error_s "E" + #define F_console_standard_short_help_s "h" + #define F_console_standard_short_light_s "l" + #define F_console_standard_short_line_first_no_s "F" + #define F_console_standard_short_line_last_no_s "L" + #define F_console_standard_short_no_color_s "n" + #define F_console_standard_short_normal_s "N" + #define F_console_standard_short_quiet_s "Q" + #define F_console_standard_short_status_in_s "s" + #define F_console_standard_short_status_out_s "S" + #define F_console_standard_short_verbose_s "V" + #define F_console_standard_short_version_s "v" + + #define F_console_standard_short_dark_s_length 1 + #define F_console_standard_short_debug_s_length 1 + #define F_console_standard_short_error_s_length 1 + #define F_console_standard_short_help_s_length 1 + #define F_console_standard_short_light_s_length 1 + #define F_console_standard_short_line_first_no_s_length 1 + #define F_console_standard_short_line_last_no_s_length 1 + #define F_console_standard_short_no_color_s_length 1 + #define F_console_standard_short_normal_s_length 1 + #define F_console_standard_short_quiet_s_length 1 + #define F_console_standard_short_status_in_s_length 1 + #define F_console_standard_short_status_out_s_length 1 + #define F_console_standard_short_verbose_s_length 1 + #define F_console_standard_short_version_s_length 1 + + #define F_console_standard_long_dark_s "dark" + #define F_console_standard_long_debug_s "debug" + #define F_console_standard_long_error_s "error" + #define F_console_standard_long_help_s "help" + #define F_console_standard_long_light_s "light" + #define F_console_standard_long_line_first_no_s "line_first_no" + #define F_console_standard_long_line_last_no_s "line_last_no" + #define F_console_standard_long_no_color_s "no_color" + #define F_console_standard_long_normal_s "normal" + #define F_console_standard_long_quiet_s "quiet" + #define F_console_standard_long_status_in_s "status_in" + #define F_console_standard_long_status_out_s "status_out" + #define F_console_standard_long_verbose_s "verbose" + #define F_console_standard_long_version_s "version" + + #define F_console_standard_long_dark_s_length 4 + #define F_console_standard_long_debug_s_length 5 + #define F_console_standard_long_error_s_length 5 + #define F_console_standard_long_help_s_length 4 + #define F_console_standard_long_light_s_length 5 + #define F_console_standard_long_line_first_no_s_length 13 + #define F_console_standard_long_line_last_no_s_length 12 + #define F_console_standard_long_no_color_s_length 8 + #define F_console_standard_long_normal_s_length 6 + #define F_console_standard_long_quiet_s_length 5 + #define F_console_standard_long_status_in_s_length 9 + #define F_console_standard_long_status_out_s_length 10 + #define F_console_standard_long_verbose_s_length 7 + #define F_console_standard_long_version_s_length 7 extern const f_string_static_t f_console_standard_short_dark_s; extern const f_string_static_t f_console_standard_short_debug_s; extern const f_string_static_t f_console_standard_short_error_s; extern const f_string_static_t f_console_standard_short_help_s; extern const f_string_static_t f_console_standard_short_light_s; + extern const f_string_static_t f_console_standard_short_line_first_no_s; + extern const f_string_static_t f_console_standard_short_line_last_no_s; extern const f_string_static_t f_console_standard_short_no_color_s; extern const f_string_static_t f_console_standard_short_normal_s; extern const f_string_static_t f_console_standard_short_quiet_s; @@ -178,6 +190,8 @@ extern "C" { extern const f_string_static_t f_console_standard_long_error_s; extern const f_string_static_t f_console_standard_long_help_s; extern const f_string_static_t f_console_standard_long_light_s; + extern const f_string_static_t f_console_standard_long_line_first_no_s; + extern const f_string_static_t f_console_standard_long_line_last_no_s; extern const f_string_static_t f_console_standard_long_no_color_s; extern const f_string_static_t f_console_standard_long_normal_s; extern const f_string_static_t f_console_standard_long_quiet_s; @@ -268,6 +282,14 @@ extern "C" { * locations: All locations within argv where this parameter is found (order is preserved). * locations_sub: All sub-locations within argv where this parameter is found (order is preserved). * values: An array of locations representing where in the argv[] the values arguments are found. + * + * The macro_f_console_parameter_t_initialize() all arguments. + * The macro_f_console_parameter_t_initialize2() reduced arguments. + * The macro_f_console_parameter_t_initialize3() reduced arguments, strings are of f_string_static_t, has short, long, and other. + * The macro_f_console_parameter_t_initialize4() reduced arguments, strings are of f_string_static_t, has short and long. + * The macro_f_console_parameter_t_initialize5() reduced arguments, strings are of f_string_static_t, has short. + * The macro_f_console_parameter_t_initialize6() reduced arguments, strings are of f_string_static_t, has long. + * The macro_f_console_parameter_t_initialize7() reduced arguments, strings are of f_string_static_t, has other. */ #ifndef _di_f_console_parameter_t_ typedef struct { @@ -300,7 +322,22 @@ extern "C" { f_array_lengths_t_initialize, \ } - #define macro_f_console_parameter_t_initialize(symbol_short, symbol_long, symbol_other, values_total, type_value) { \ + #define macro_f_console_parameter_t_initialize(symbol_short, symbol_long, symbol_other, values_total, type_value, result, location, location_sub, locations, locations_sub, values) { \ + symbol_short, \ + symbol_long, \ + symbol_other, \ + values_total, \ + type_value, \ + result, \ + total, \ + location, \ + location_sub, \ + locations, \ + locations_sub, \ + values, \ + } + + #define macro_f_console_parameter_t_initialize2(symbol_short, symbol_long, symbol_other, values_total, type_value) { \ symbol_short, \ symbol_long, \ symbol_other, \ @@ -314,19 +351,74 @@ extern "C" { f_array_lengths_t_initialize, \ } - #define macro_f_console_parameter_t_initialize2(symbol_short, symbol_long, symbol_other, values_total, type_value, result, location, location_sub, locations, locations_sub, values) { \ - symbol_short, \ - symbol_long, \ - symbol_other, \ + #define macro_f_console_parameter_t_initialize3(symbol_short, symbol_long, symbol_other, values_total, type_value) { \ + symbol_short.string, \ + symbol_long.string, \ + symbol_other.string, \ values_total, \ type_value, \ - result, \ - total, \ - location, \ - location_sub, \ - locations, \ - locations_sub, \ - values, \ + f_console_result_none_e, \ + 0, \ + 0, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + } + + #define macro_f_console_parameter_t_initialize4(symbol_short, symbol_long, values_total, type_value) { \ + symbol_short.string, \ + symbol_long.string, \ + 0, \ + values_total, \ + type_value, \ + f_console_result_none_e, \ + 0, \ + 0, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + } + + #define macro_f_console_parameter_t_initialize5(symbol_short, values_total, type_value) { \ + symbol_short.string, \ + 0, \ + 0, \ + values_total, \ + type_value, \ + f_console_result_none_e, \ + 0, \ + 0, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + } + + #define macro_f_console_parameter_t_initialize6(symbol_long, values_total, type_value) { \ + 0, \ + symbol_long.string, \ + 0, \ + values_total, \ + type_value, \ + f_console_result_none_e, \ + 0, \ + 0, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + } + + #define macro_f_console_parameter_t_initialize7(symbol_other, values_total, type_value) { \ + 0, \ + 0, \ + symbol_other.string, \ + values_total, \ + type_value, \ + f_console_result_none_e, \ + 0, \ + 0, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ + f_array_lengths_t_initialize, \ } #endif // _di_f_console_parameter_t_ @@ -357,42 +449,16 @@ extern "C" { #define macro_f_console_parameters_t_initialize(parameter, used) { parameter, f_string_dynamics_t_initialize, f_array_lengths_t_initialize, used } #endif // _di_f_console_parameters_t_ -/** - * Provide a helper structure for references and processing standard C main() arguments. - * - * The f_console_parameter_id_t is designed to be used for the enums to represent any given parameter by the ID. - */ -#ifndef _di_f_console_parameter_id_t_ - typedef uint16_t f_console_parameter_id_t; - - #define f_console_parameter_id_t_initialize 0 - - #define macro_f_console_parameter_id_t_initialize(id) id -#endif // _di_f_console_parameter_id_t_ - -/** - * The f_console_parameter_ids_t is designed for passing this to a function as a single argument. - * - * id: An array of f_console_parameter_id_t whose size is defined by the "used" property. - * used: The total number of ids in the id array. - */ -#ifndef _di_f_console_parameter_ids_t_ - typedef struct { - f_console_parameter_id_t *id; - - f_array_length_t used; - } f_console_parameter_ids_t; - - #define f_console_parameter_ids_t_initialize { 0, 0 } - - #define macro_f_console_parameter_ids_t_initialize(id, used) { id, used } -#endif // _di_f_console_parameter_ids_t_ - /** * Provide a helper structure for referencing the argc and argv standard main arguments. * * This is intended to only store the argc and argv and should not be treated as dynamic. * + * argc: The total number of arguments in argv. + * + * argv: An array of strings representing arguments passed to some program. + * envp: Any array of strings representing all environment variables at the time the program is called. + * * macro_f_console_arguments_t_initialize() initializes the structure. */ #ifndef _di_f_console_arguments_t_ diff --git a/level_0/f_console/data/build/settings b/level_0/f_console/data/build/settings index 1b7901f7e..66d4a6abb 100644 --- a/level_0/f_console/data/build/settings +++ b/level_0/f_console/data/build/settings @@ -3,7 +3,7 @@ build_name f_console version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_console/data/build/settings-tests b/level_0/f_console/data/build/settings-tests index a0a824137..8e39803c0 100644 --- a/level_0/f_console/data/build/settings-tests +++ b/level_0/f_console/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_console version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_control_group/data/build/settings b/level_0/f_control_group/data/build/settings index a61e4c0cc..dd6280a33 100644 --- a/level_0/f_control_group/data/build/settings +++ b/level_0/f_control_group/data/build/settings @@ -3,7 +3,7 @@ build_name f_control_group version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_control_group/data/build/settings-tests b/level_0/f_control_group/data/build/settings-tests index 0daed427e..e3fbf41bc 100644 --- a/level_0/f_control_group/data/build/settings-tests +++ b/level_0/f_control_group/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_control_group version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_conversion/data/build/settings b/level_0/f_conversion/data/build/settings index c43f5118a..71d353331 100644 --- a/level_0/f_conversion/data/build/settings +++ b/level_0/f_conversion/data/build/settings @@ -3,7 +3,7 @@ build_name f_conversion version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_conversion/data/build/settings-mocks b/level_0/f_conversion/data/build/settings-mocks index 1041c2f9d..b1fbe604c 100644 --- a/level_0/f_conversion/data/build/settings-mocks +++ b/level_0/f_conversion/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_conversion version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_conversion/data/build/settings-tests b/level_0/f_conversion/data/build/settings-tests index 58a3e4b5c..4d347d71f 100644 --- a/level_0/f_conversion/data/build/settings-tests +++ b/level_0/f_conversion/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_conversion version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_directory/data/build/settings b/level_0/f_directory/data/build/settings index c3fa67ffb..28b9b23ef 100644 --- a/level_0/f_directory/data/build/settings +++ b/level_0/f_directory/data/build/settings @@ -3,7 +3,7 @@ build_name f_directory version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_directory/data/build/settings-mocks b/level_0/f_directory/data/build/settings-mocks index a72b88e64..50189b99a 100644 --- a/level_0/f_directory/data/build/settings-mocks +++ b/level_0/f_directory/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_directory version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_directory/data/build/settings-tests b/level_0/f_directory/data/build/settings-tests index 6338b40d2..74365cce5 100644 --- a/level_0/f_directory/data/build/settings-tests +++ b/level_0/f_directory/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_directory version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_environment/data/build/settings b/level_0/f_environment/data/build/settings index 20be8d852..8645103de 100644 --- a/level_0/f_environment/data/build/settings +++ b/level_0/f_environment/data/build/settings @@ -3,7 +3,7 @@ build_name f_environment version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_environment/data/build/settings-mocks b/level_0/f_environment/data/build/settings-mocks index 2c7f99bbf..3b3e0b3a9 100644 --- a/level_0/f_environment/data/build/settings-mocks +++ b/level_0/f_environment/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_environment version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_environment/data/build/settings-tests b/level_0/f_environment/data/build/settings-tests index 212b25812..e89e53d88 100644 --- a/level_0/f_environment/data/build/settings-tests +++ b/level_0/f_environment/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_environment version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_execute/data/build/settings b/level_0/f_execute/data/build/settings index 4d92ae257..4ea2d96c1 100644 --- a/level_0/f_execute/data/build/settings +++ b/level_0/f_execute/data/build/settings @@ -3,7 +3,7 @@ build_name f_execute version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_execute/data/build/settings-tests b/level_0/f_execute/data/build/settings-tests index 9f9628e07..2c6e0a0fe 100644 --- a/level_0/f_execute/data/build/settings-tests +++ b/level_0/f_execute/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_execute version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_file/c/file.c b/level_0/f_file/c/file.c index 7d24c963f..c17666961 100644 --- a/level_0/f_file/c/file.c +++ b/level_0/f_file/c/file.c @@ -1956,15 +1956,12 @@ extern "C" { #endif // _di_f_file_stream_close_ #ifndef _di_f_file_stream_flush_ - f_status_t f_file_stream_flush(f_file_t * const file) { - #ifndef _di_level_0_parameter_checking_ - if (!file) return F_status_set_error(F_parameter); - #endif // _di_level_0_parameter_checking_ + f_status_t f_file_stream_flush(const f_file_t file) { - if (!file->stream) return F_stream_not; + if (!file.stream) return F_stream_not; // Only 0 is considered a success and so any non-zero value could be an error. - if (fflush(file->stream) != 0) { + if (fflush(file.stream) != 0) { if (errno == EAGAIN || errno == EWOULDBLOCK) return F_status_set_error(F_block); if (errno == EBADF) return F_status_set_error(F_file_descriptor); if (errno == EFAULT) return F_status_set_error(F_buffer); diff --git a/level_0/f_file/c/file.h b/level_0/f_file/c/file.h index fffd3012d..949ccf691 100644 --- a/level_0/f_file/c/file.h +++ b/level_0/f_file/c/file.h @@ -2111,7 +2111,7 @@ extern "C" { * @see fflush() */ #ifndef _di_f_file_stream_flush_ - extern f_status_t f_file_stream_flush(f_file_t * const file); + extern f_status_t f_file_stream_flush(const f_file_t file); #endif // _di_f_file_stream_flush_ /** diff --git a/level_0/f_file/data/build/settings b/level_0/f_file/data/build/settings index 11a72ecc8..5e7561e54 100644 --- a/level_0/f_file/data/build/settings +++ b/level_0/f_file/data/build/settings @@ -3,7 +3,7 @@ build_name f_file version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_file/data/build/settings-mocks b/level_0/f_file/data/build/settings-mocks index 9062ac4fe..d467aacf9 100644 --- a/level_0/f_file/data/build/settings-mocks +++ b/level_0/f_file/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_file version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_file/data/build/settings-tests b/level_0/f_file/data/build/settings-tests index c20c42069..24d8ea55e 100644 --- a/level_0/f_file/data/build/settings-tests +++ b/level_0/f_file/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_file version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_fss/data/build/settings b/level_0/f_fss/data/build/settings index db653dc30..26b026257 100644 --- a/level_0/f_fss/data/build/settings +++ b/level_0/f_fss/data/build/settings @@ -3,7 +3,7 @@ build_name f_fss version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_fss/data/build/settings-mocks b/level_0/f_fss/data/build/settings-mocks index 83150cc43..590a3d7c6 100644 --- a/level_0/f_fss/data/build/settings-mocks +++ b/level_0/f_fss/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_fss version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_fss/data/build/settings-tests b/level_0/f_fss/data/build/settings-tests index d53dfcd88..5a430ac13 100644 --- a/level_0/f_fss/data/build/settings-tests +++ b/level_0/f_fss/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_fss version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_iki/data/build/settings b/level_0/f_iki/data/build/settings index 283b28e42..38b3b9d79 100644 --- a/level_0/f_iki/data/build/settings +++ b/level_0/f_iki/data/build/settings @@ -3,7 +3,7 @@ build_name f_iki version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_iki/data/build/settings-tests b/level_0/f_iki/data/build/settings-tests index 08e96191d..e58d1f1ed 100644 --- a/level_0/f_iki/data/build/settings-tests +++ b/level_0/f_iki/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_iki version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_limit/data/build/settings b/level_0/f_limit/data/build/settings index b337686eb..0704ca4aa 100644 --- a/level_0/f_limit/data/build/settings +++ b/level_0/f_limit/data/build/settings @@ -3,7 +3,7 @@ build_name f_limit version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_limit/data/build/settings-mocks b/level_0/f_limit/data/build/settings-mocks index d0ef9df14..3877d93b9 100644 --- a/level_0/f_limit/data/build/settings-mocks +++ b/level_0/f_limit/data/build/settings-mocks @@ -3,7 +3,7 @@ build_name f_limit version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_limit/data/build/settings-tests b/level_0/f_limit/data/build/settings-tests index ad1ab85ed..d9e505315 100644 --- a/level_0/f_limit/data/build/settings-tests +++ b/level_0/f_limit/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_limit version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_memory/c/memory.c b/level_0/f_memory/c/memory.c index eb228f467..d6d3b5989 100644 --- a/level_0/f_memory/c/memory.c +++ b/level_0/f_memory/c/memory.c @@ -6,16 +6,19 @@ extern "C" { #endif #ifndef _di_f_memory_adjust_ - f_status_t f_memory_adjust(const size_t old_length, const size_t new_length, const size_t size, void ** const pointer) { + f_status_t f_memory_adjust(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer) { #ifndef _di_level_0_parameter_checking_ if (!size) return F_status_set_error(F_parameter); if (!pointer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ + // Prevent double-frees and unnecessary frees. + if (!*pointer && !length_new || length_old == length_new) return F_data_not; + #ifdef _f_memory_FORCE_fast_memory_ - return private_f_memory_resize(old_length, new_length, size, pointer); + return private_f_memory_resize(length_old, length_new, size, pointer); #else // _f_memory_FORCE_fast_memory_ - return private_f_memory_adjust(old_length, new_length, size, pointer); + return private_f_memory_adjust(length_old, length_new, size, pointer); #endif // _f_memory_FORCE_fast_memory_ } #endif // _di_f_memory_adjust_ @@ -23,13 +26,12 @@ extern "C" { #ifndef _di_f_memory_delete_ f_status_t f_memory_delete(const size_t length, const size_t size, void ** const pointer) { #ifndef _di_level_0_parameter_checking_ + if (!size) return F_status_set_error(F_parameter); if (!pointer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ // Prevent double-frees. - if (!*pointer || !size) { - return F_data_not; - } + if (!*pointer) return F_data_not; #ifdef _f_memory_FORCE_secure_memory_ if (!length) { @@ -54,9 +56,7 @@ extern "C" { #endif // _di_level_0_parameter_checking_ // Prevent double-frees. - if (!*pointer) { - return F_data_not; - } + if (!*pointer) return F_data_not; #ifndef _f_memory_FORCE_fast_memory_ if (!length) { @@ -80,16 +80,10 @@ extern "C" { if (!pointer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - // prevent double-allocations. - if (*pointer || !length) { - return F_data_not; - } - - *pointer = calloc(length, size); + // Prevent double-allocations and unnecessary frees. + if (*pointer || !length) return F_data_not; - if (*pointer) { - return F_none; - } + if (*pointer = calloc(length, size)) return F_none; return F_status_set_error(F_memory_not); } @@ -100,26 +94,21 @@ extern "C" { f_status_t f_memory_new_aligned(const size_t length, const size_t alignment, void ** const pointer) { #ifndef _di_level_0_parameter_checking_ if (!alignment) return F_status_set_error(F_parameter); - if (!pointer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - // Prevent double-allocations. - if (*pointer || !length) { - return F_data_not; - } + // Prevent double-allocations and unnecessary frees. + if (*pointer || !length) return F_data_not; #ifdef _f_memory_USE_posix_memalign_ const int result = posix_memalign(pointer, alignment, length); if (result) { - if (result == EINVAL) { - return F_status_set_error(F_parameter); - } + if (result == EINVAL) return F_status_set_error(F_parameter); return F_status_set_error(F_memory_not); } #else - void *result = aligned_alloc(alignment, length); + void * const result = aligned_alloc(alignment, length); if (result) { *pointer = result; @@ -141,16 +130,19 @@ extern "C" { #endif // _di_f_memory_new_aligned_ #ifndef _di_f_memory_resize_ - f_status_t f_memory_resize(const size_t old_length, const size_t new_length, const size_t size, void ** const pointer) { + f_status_t f_memory_resize(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer) { #ifndef _di_level_0_parameter_checking_ if (!size) return F_status_set_error(F_parameter); if (!pointer) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ + // Prevent double-frees and unnecessary frees. + if (!*pointer && !length_new || length_old == length_new) return F_data_not; + #ifdef _f_memory_FORCE_secure_memory_ - return private_f_memory_adjust(old_length, new_length, size, pointer); + return private_f_memory_adjust(length_old, length_new, size, pointer); #else // _f_memory_FORCE_secure_memory_ - return private_f_memory_resize(old_length, new_length, size, pointer); + return private_f_memory_resize(length_old, length_new, size, pointer); #endif // _f_memory_FORCE_secure_memory_ } #endif // _di_f_memory_resize_ diff --git a/level_0/f_memory/c/memory.h b/level_0/f_memory/c/memory.h index de2b970ea..d285ad45f 100644 --- a/level_0/f_memory/c/memory.h +++ b/level_0/f_memory/c/memory.h @@ -34,9 +34,9 @@ extern "C" { * * The pointer address might be changed by realloc(). * - * @param old_length + * @param length_old * The total number of blocks representing the length to be resized from. - * @param new_length + * @param length_new * The total number of blocks representing the length to be resized to. * @param size * The block size, in bytes (size * length = allocated size). @@ -55,7 +55,7 @@ extern "C" { * @see realloc() */ #ifndef _di_f_memory_adjust_ - extern f_status_t f_memory_adjust(const size_t old_length, const size_t new_length, const size_t size, void ** const pointer); + extern f_status_t f_memory_adjust(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer); #endif // _di_f_memory_adjust_ /** @@ -174,9 +174,9 @@ extern "C" { * * The pointer address might be changed by realloc(). * - * @param old_length + * @param length_old * The total number of blocks representing the length to be resized from. - * @param new_length + * @param length_new * The total number of blocks representing the length to be resized to. * @param size * The block size, in bytes (size * length = allocated size). @@ -195,7 +195,7 @@ extern "C" { * @see realloc() */ #ifndef _di_f_memory_resize_ - extern f_status_t f_memory_resize(const size_t old_length, const size_t new_length, const size_t size, void ** const pointer); + extern f_status_t f_memory_resize(const size_t length_old, const size_t length_new, const size_t size, void ** const pointer); #endif // _di_f_memory_resize_ #ifdef __cplusplus diff --git a/level_0/f_memory/c/private-memory.c b/level_0/f_memory/c/private-memory.c index 7d057f83f..8838c77a7 100644 --- a/level_0/f_memory/c/private-memory.c +++ b/level_0/f_memory/c/private-memory.c @@ -8,9 +8,7 @@ extern "C" { #if !defined(_di_f_memory_adjust_) || !defined(_di_f_memory_structure_adjust_) || !defined(_di_f_memory_structure_decimate_by_) f_status_t private_f_memory_adjust(const size_t length_old, const size_t length_new, const size_t type_size, void ** const pointer) { - if (length_old == length_new) { - return F_data_not; - } + if (length_old == length_new) return F_data_not; if (*pointer) { if (length_old) { @@ -23,7 +21,7 @@ extern "C" { } if (length_new) { - void *new_pointer = realloc(*pointer, type_size * length_new); + void * const new_pointer = realloc(*pointer, type_size * length_new); if (new_pointer) { if (length_new > length_old) { @@ -49,10 +47,7 @@ extern "C" { } else if (length_new) { *pointer = calloc(type_size, length_new); - - if (*pointer) { - return F_none; - } + if (*pointer) return F_none; } else { return F_data_not; @@ -65,13 +60,9 @@ extern "C" { #if !defined(_di_f_memory_resize_) || !defined(_di_memory_structure_decrease_by_) || !defined(_di_memory_structure_increase_) || !defined(_di_memory_structure_increase_by_) || !defined(_di_f_memory_structure_resize_) f_status_t private_f_memory_resize(const size_t length_old, const size_t length_new, const size_t type_size, void ** const pointer) { - if (length_old == length_new) { - return F_data_not; - } - if (*pointer) { if (length_new) { - void *new_pointer = realloc(*pointer, type_size * length_new); + void * const new_pointer = realloc(*pointer, type_size * length_new); if (new_pointer) { if (length_new > length_old) { @@ -97,10 +88,7 @@ extern "C" { } else if (length_new) { *pointer = calloc(type_size, length_new); - - if (*pointer) { - return F_none; - } + if (*pointer) return F_none; } else { return F_data_not; diff --git a/level_0/f_memory/data/build/settings b/level_0/f_memory/data/build/settings index 0328eb805..cce19b49c 100644 --- a/level_0/f_memory/data/build/settings +++ b/level_0/f_memory/data/build/settings @@ -3,7 +3,7 @@ build_name f_memory version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_path/data/build/settings b/level_0/f_path/data/build/settings index 9122a333a..df45624c4 100644 --- a/level_0/f_path/data/build/settings +++ b/level_0/f_path/data/build/settings @@ -3,7 +3,7 @@ build_name f_path version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_path/data/build/settings-mocks b/level_0/f_path/data/build/settings-mocks index 6dbb759de..355518aa9 100644 --- a/level_0/f_path/data/build/settings-mocks +++ b/level_0/f_path/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_path version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_path/data/build/settings-tests b/level_0/f_path/data/build/settings-tests index baad1ef4e..f2e833691 100644 --- a/level_0/f_path/data/build/settings-tests +++ b/level_0/f_path/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_path version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_pipe/data/build/settings b/level_0/f_pipe/data/build/settings index 7dbeecb8b..bd5c4d66d 100644 --- a/level_0/f_pipe/data/build/settings +++ b/level_0/f_pipe/data/build/settings @@ -3,7 +3,7 @@ build_name f_pipe version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_pipe/data/build/settings-mocks b/level_0/f_pipe/data/build/settings-mocks index fb72ca825..41dc565a0 100644 --- a/level_0/f_pipe/data/build/settings-mocks +++ b/level_0/f_pipe/data/build/settings-mocks @@ -3,7 +3,7 @@ build_name f_pipe version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_pipe/data/build/settings-tests b/level_0/f_pipe/data/build/settings-tests index 759fbcd5f..a82a23f2e 100644 --- a/level_0/f_pipe/data/build/settings-tests +++ b/level_0/f_pipe/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_pipe version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_print/c/print.c b/level_0/f_print/c/print.c index 2ef492dc9..a9df658b5 100644 --- a/level_0/f_print/c/print.c +++ b/level_0/f_print/c/print.c @@ -37,9 +37,7 @@ static inline f_status_t private_inline_f_print_write_unlocked(const f_string_t if (!stream) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!length || !string) { - return F_data_not; - } + if (!length || !string) return F_data_not; return private_f_print(string, length, stream); } @@ -195,9 +193,7 @@ static inline f_status_t private_inline_f_print_write_unlocked(const f_string_t if (!stream) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!buffer.used || !buffer.string) { - return F_data_not; - } + if (!buffer.used || !buffer.string) return F_data_not; return private_f_print_raw(buffer.string, buffer.used, stream); } @@ -209,9 +205,7 @@ static inline f_status_t private_inline_f_print_write_unlocked(const f_string_t if (!stream) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!buffer.used || !buffer.string) { - return F_data_not; - } + if (!buffer.used || !buffer.string) return F_data_not; return private_f_print_raw_safely(buffer.string, buffer.used, stream); } @@ -223,9 +217,7 @@ static inline f_status_t private_inline_f_print_write_unlocked(const f_string_t if (!stream) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!buffer.used || !buffer.string) { - return F_data_not; - } + if (!buffer.used || !buffer.string) return F_data_not; return private_f_print_safely(buffer.string, buffer.used, stream); } @@ -237,9 +229,7 @@ static inline f_status_t private_inline_f_print_write_unlocked(const f_string_t if (!stream) return F_status_set_error(F_parameter); #endif // _di_level_0_parameter_checking_ - if (!length || !string) { - return F_data_not; - } + if (!length || !string) return F_data_not; return private_f_print_except(string, offset, length, except, stream); } diff --git a/level_0/f_print/data/build/settings b/level_0/f_print/data/build/settings index e12f57b8d..a99372e06 100644 --- a/level_0/f_print/data/build/settings +++ b/level_0/f_print/data/build/settings @@ -3,7 +3,7 @@ build_name f_print version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_print/data/build/settings-mocks b/level_0/f_print/data/build/settings-mocks index 0633159aa..57e99d2ad 100644 --- a/level_0/f_print/data/build/settings-mocks +++ b/level_0/f_print/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_print version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_print/data/build/settings-tests b/level_0/f_print/data/build/settings-tests index 5eb1c838a..30199ec2a 100644 --- a/level_0/f_print/data/build/settings-tests +++ b/level_0/f_print/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_print version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_serialize/data/build/settings b/level_0/f_serialize/data/build/settings index 779f2a921..fb4977554 100644 --- a/level_0/f_serialize/data/build/settings +++ b/level_0/f_serialize/data/build/settings @@ -3,7 +3,7 @@ build_name f_serialize version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_serialize/data/build/settings-mocks b/level_0/f_serialize/data/build/settings-mocks index 65eb10cd9..13e04daeb 100644 --- a/level_0/f_serialize/data/build/settings-mocks +++ b/level_0/f_serialize/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_serialize version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_serialize/data/build/settings-tests b/level_0/f_serialize/data/build/settings-tests index 13f59b79f..679b72d01 100644 --- a/level_0/f_serialize/data/build/settings-tests +++ b/level_0/f_serialize/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_serialize version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_signal/data/build/settings b/level_0/f_signal/data/build/settings index 5d298cb52..a31340626 100644 --- a/level_0/f_signal/data/build/settings +++ b/level_0/f_signal/data/build/settings @@ -3,7 +3,7 @@ build_name f_signal version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_signal/data/build/settings-mocks b/level_0/f_signal/data/build/settings-mocks index 7d16e7ef7..149929a41 100644 --- a/level_0/f_signal/data/build/settings-mocks +++ b/level_0/f_signal/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_signal version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_signal/data/build/settings-tests b/level_0/f_signal/data/build/settings-tests index 81937d1c0..4ca9bb617 100644 --- a/level_0/f_signal/data/build/settings-tests +++ b/level_0/f_signal/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_signal version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_socket/data/build/settings b/level_0/f_socket/data/build/settings index fe6ed1a27..01eb206d1 100644 --- a/level_0/f_socket/data/build/settings +++ b/level_0/f_socket/data/build/settings @@ -3,7 +3,7 @@ build_name f_socket version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_socket/data/build/settings-mocks b/level_0/f_socket/data/build/settings-mocks index 66d7625e2..6b2e0bcbc 100644 --- a/level_0/f_socket/data/build/settings-mocks +++ b/level_0/f_socket/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_socket version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_socket/data/build/settings-tests b/level_0/f_socket/data/build/settings-tests index 96c364906..d844cec06 100644 --- a/level_0/f_socket/data/build/settings-tests +++ b/level_0/f_socket/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_socket version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_status/c/status.h b/level_0/f_status/c/status.h index 7f69d4b8f..2b897fad3 100644 --- a/level_0/f_status/c/status.h +++ b/level_0/f_status/c/status.h @@ -319,6 +319,8 @@ extern "C" { F_halt_not, F_header, F_header_not, + F_help, + F_help_not, F_ignore, F_ignore_not, F_implemented, diff --git a/level_0/f_status/data/build/settings b/level_0/f_status/data/build/settings index 9e4c46499..687007646 100644 --- a/level_0/f_status/data/build/settings +++ b/level_0/f_status/data/build/settings @@ -3,7 +3,7 @@ build_name f_status version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_status_string/c/status_string.c b/level_0/f_status_string/c/status_string.c index 3d7098d96..20d64578a 100644 --- a/level_0/f_status_string/c/status_string.c +++ b/level_0/f_status_string/c/status_string.c @@ -193,6 +193,8 @@ extern "C" { const f_string_static_t f_status_halt_not_s = macro_f_string_static_t_initialize(F_status_halt_not_s, 0, F_status_halt_not_s_length); const f_string_static_t f_status_header_s = macro_f_string_static_t_initialize(F_status_header_s, 0, F_status_header_s_length); const f_string_static_t f_status_header_not_s = macro_f_string_static_t_initialize(F_status_header_not_s, 0, F_status_header_not_s_length); + const f_string_static_t f_status_help_s = macro_f_string_static_t_initialize(F_status_help_s, 0, F_status_help_s_length); + const f_string_static_t f_status_help_not_s = macro_f_string_static_t_initialize(F_status_help_not_s, 0, F_status_help_not_s_length); const f_string_static_t f_status_ignore_s = macro_f_string_static_t_initialize(F_status_ignore_s, 0, F_status_ignore_s_length); const f_string_static_t f_status_ignore_not_s = macro_f_string_static_t_initialize(F_status_ignore_not_s, 0, F_status_ignore_not_s_length); const f_string_static_t f_status_implemented_s = macro_f_string_static_t_initialize(F_status_implemented_s, 0, F_status_implemented_s_length); diff --git a/level_0/f_status_string/c/status_string.h b/level_0/f_status_string/c/status_string.h index 8c052275a..b8199dd39 100644 --- a/level_0/f_status_string/c/status_string.h +++ b/level_0/f_status_string/c/status_string.h @@ -346,6 +346,8 @@ extern "C" { #define F_status_halt_not_s "F_halt_not" #define F_status_header_s "F_header" #define F_status_header_not_s "F_header_not" + #define F_status_help_s "F_help" + #define F_status_help_not_s "F_help_not" #define F_status_ignore_s "F_ignore" #define F_status_ignore_not_s "F_ignore_not" #define F_status_implemented_s "F_implemented" @@ -640,6 +642,8 @@ extern "C" { #define F_status_halt_not_s_length 10 #define F_status_header_s_length 8 #define F_status_header_not_s_length 12 + #define F_status_help_s_length 6 + #define F_status_help_not_s_length 10 #define F_status_ignore_s_length 8 #define F_status_ignore_not_s_length 12 #define F_status_implemented_s_length 13 @@ -936,6 +940,8 @@ extern "C" { extern const f_string_static_t f_status_halt_not_s; extern const f_string_static_t f_status_header_s; extern const f_string_static_t f_status_header_not_s; + extern const f_string_static_t f_status_help_s; + extern const f_string_static_t f_status_help_not_s; extern const f_string_static_t f_status_ignore_s; extern const f_string_static_t f_status_ignore_not_s; extern const f_string_static_t f_status_implemented_s; diff --git a/level_0/f_status_string/data/build/settings b/level_0/f_status_string/data/build/settings index 6039e4a69..8f422ef81 100644 --- a/level_0/f_status_string/data/build/settings +++ b/level_0/f_status_string/data/build/settings @@ -3,7 +3,7 @@ build_name f_status_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_status_string/data/build/settings-tests b/level_0/f_status_string/data/build/settings-tests index f76569145..361106b2e 100644 --- a/level_0/f_status_string/data/build/settings-tests +++ b/level_0/f_status_string/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_status_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_status_string/tests/unit/c/test-status_string-to.c b/level_0/f_status_string/tests/unit/c/test-status_string-to.c index b62b3aa5d..80f7e62fc 100644 --- a/level_0/f_status_string/tests/unit/c/test-status_string-to.c +++ b/level_0/f_status_string/tests/unit/c/test-status_string-to.c @@ -207,6 +207,8 @@ void test__f_status_string_to__works(void **state) { F_group_not, F_halt, F_halt_not, + F_help, + F_help_not, F_header, F_header_not, F_ignore, @@ -797,6 +799,8 @@ void test__f_status_string_to__works(void **state) { f_status_group_not_s, f_status_halt_s, f_status_halt_not_s, + f_status_help_s, + f_status_help_not_s, f_status_header_s, f_status_header_not_s, f_status_ignore_s, @@ -1209,7 +1213,7 @@ void test__f_status_string_to__works(void **state) { f_status_status_code_last_s, }; - for (uint16_t i = 0; i < 587; ++i) { + for (uint16_t i = 0; i < 589; ++i) { f_string_static_t result = f_string_static_t_initialize; diff --git a/level_0/f_string/c/string/common.h b/level_0/f_string/c/string/common.h index 0805548ac..af95eed5c 100644 --- a/level_0/f_string/c/string/common.h +++ b/level_0/f_string/c/string/common.h @@ -78,8 +78,8 @@ extern "C" { * GCC errors such as: "warning: assignment discards ‘const’ qualifier from pointer target type [-Wdiscarded-qualifiers]" can be avoided using this. * * Do not confuse this with "const f_string_static_t". - * When "const f_string_static_t * xxx" is passed to a function, then "xxx" cannot be changed. - * When "f_string_constant_t * xxx" is passed to a function, then "xxx" can be changed. + * When "const f_string_t xxx" is passed to a function, then "xxx" cannot be changed. + * When "f_string_constant_t xxx" is passed to a function, then "xxx" can be changed. */ #ifndef _di_f_string_constant_t_ typedef const f_char_t *f_string_constant_t; @@ -89,7 +89,7 @@ extern "C" { #define macro_f_string_constant_t_initialize(string) string #define macro_f_string_constant_t_clear(string) string = 0; -#endif // _di_f_string_t_ +#endif // _di_f_string_constant_t_ #ifdef __cplusplus } // extern "C" diff --git a/level_0/f_string/c/string/private-dynamic.c b/level_0/f_string/c/string/private-dynamic.c index b4520665a..43a3edf0e 100644 --- a/level_0/f_string/c/string/private-dynamic.c +++ b/level_0/f_string/c/string/private-dynamic.c @@ -56,9 +56,7 @@ extern "C" { #if !defined(_di_f_string_dynamics_adjust_) || !defined(_di_f_string_dynamics_append_) || !defined(_di_f_string_dynamics_decimate_by_) || !defined(_di_f_string_map_multis_adjust_) || !defined(_di_f_string_map_multis_append_) f_status_t private_f_string_dynamics_adjust(const f_array_length_t length, f_string_dynamics_t * const dynamics) { - if (dynamics->used + length > F_array_length_t_size_d) { - return F_status_set_error(F_array_too_large); - } + if (dynamics->used + length > F_array_length_t_size_d) return F_status_set_error(F_array_too_large); f_status_t status = F_none; @@ -132,9 +130,7 @@ extern "C" { #if !defined(_di_f_string_dynamics_decrease_by_) || !defined(_di_f_string_dynamics_increase_) || !defined(_di_f_string_dynamics_increase_by_) || !defined(f_string_map_multis_append) f_status_t private_f_string_dynamics_resize(const f_array_length_t length, f_string_dynamics_t * const dynamics) { - if (dynamics->used + length > F_array_length_t_size_d) { - return F_status_set_error(F_array_too_large); - } + if (dynamics->used + length > F_array_length_t_size_d) return F_status_set_error(F_array_too_large); f_status_t status = F_none; @@ -160,9 +156,7 @@ extern "C" { #if !defined(_di_f_string_dynamicss_adjust_) || !defined(_di_f_string_dynamicss_append_) || !defined(_di_f_string_dynamicss_decimate_by_) || !defined(_di_f_string_map_multis_adjust_) || !defined(_di_f_string_map_multis_append_) f_status_t private_f_string_dynamicss_adjust(const f_array_length_t length, f_string_dynamicss_t * const dynamicss) { - if (dynamicss->used + length > F_array_length_t_size_d) { - return F_status_set_error(F_array_too_large); - } + if (dynamicss->used + length > F_array_length_t_size_d) return F_status_set_error(F_array_too_large); f_status_t status = F_none; @@ -188,9 +182,7 @@ extern "C" { #if !defined(_di_f_string_dynamicss_decrease_by_) || !defined(_di_f_string_dynamicss_increase_) || !defined(_di_f_string_dynamicss_increase_by_) || !defined(_di_f_string_dynamicss_append_all_) || !defined(_di_f_string_map_multis_append_all_) f_status_t private_f_string_dynamicss_resize(const f_array_length_t length, f_string_dynamicss_t * const dynamicss) { - if (dynamicss->used + length > F_array_length_t_size_d) { - return F_status_set_error(F_array_too_large); - } + if (dynamicss->used + length > F_array_length_t_size_d) return F_status_set_error(F_array_too_large); f_status_t status = F_none; diff --git a/level_0/f_string/data/build/settings b/level_0/f_string/data/build/settings index e3867e6f8..9fcd0793a 100644 --- a/level_0/f_string/data/build/settings +++ b/level_0/f_string/data/build/settings @@ -3,7 +3,7 @@ build_name f_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_string/data/build/settings-tests b/level_0/f_string/data/build/settings-tests index 7eaa546f5..03ef484f0 100644 --- a/level_0/f_string/data/build/settings-tests +++ b/level_0/f_string/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_thread/data/build/settings b/level_0/f_thread/data/build/settings index e0f21bd8d..ae880cbd9 100644 --- a/level_0/f_thread/data/build/settings +++ b/level_0/f_thread/data/build/settings @@ -3,7 +3,7 @@ build_name f_thread version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_thread/data/build/settings-mocks b/level_0/f_thread/data/build/settings-mocks index 4efb2c0f7..45b3dfc7c 100644 --- a/level_0/f_thread/data/build/settings-mocks +++ b/level_0/f_thread/data/build/settings-mocks @@ -13,7 +13,7 @@ build_name f_thread version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_thread/data/build/settings-tests b/level_0/f_thread/data/build/settings-tests index ab916e5c8..a9ad8fe51 100644 --- a/level_0/f_thread/data/build/settings-tests +++ b/level_0/f_thread/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_thread version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_0/f_type/data/build/settings b/level_0/f_type/data/build/settings index b7b4ba6ef..93052a9e5 100644 --- a/level_0/f_type/data/build/settings +++ b/level_0/f_type/data/build/settings @@ -3,7 +3,7 @@ build_name f_type version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_type_array/data/build/settings b/level_0/f_type_array/data/build/settings index cf7f7f1a5..7b52ecca5 100644 --- a/level_0/f_type_array/data/build/settings +++ b/level_0/f_type_array/data/build/settings @@ -3,7 +3,7 @@ build_name f_type_array version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_utf/data/build/settings b/level_0/f_utf/data/build/settings index 7f90ad2b7..b88b6b74d 100644 --- a/level_0/f_utf/data/build/settings +++ b/level_0/f_utf/data/build/settings @@ -3,7 +3,7 @@ build_name f_utf version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_0/f_utf/data/build/settings-tests b/level_0/f_utf/data/build/settings-tests index cb2591be1..b2c5f4b8e 100644 --- a/level_0/f_utf/data/build/settings-tests +++ b/level_0/f_utf/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-f_utf version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_1/fl_control_group/c/control_group.c b/level_1/fl_control_group/c/control_group.c index 9df8727f0..513f5a056 100644 --- a/level_1/fl_control_group/c/control_group.c +++ b/level_1/fl_control_group/c/control_group.c @@ -48,7 +48,7 @@ extern "C" { fprintf(file.stream, "%d", id); - f_file_stream_flush(&file); + f_file_stream_flush(file); status = f_file_stream_close(&file); if (F_status_is_error(status)) break; } // for diff --git a/level_1/fl_control_group/data/build/settings b/level_1/fl_control_group/data/build/settings index c0da86076..dae1699b8 100644 --- a/level_1/fl_control_group/data/build/settings +++ b/level_1/fl_control_group/data/build/settings @@ -3,7 +3,7 @@ build_name fl_control_group version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_conversion/data/build/settings b/level_1/fl_conversion/data/build/settings index 84a88ab09..92f5206a6 100644 --- a/level_1/fl_conversion/data/build/settings +++ b/level_1/fl_conversion/data/build/settings @@ -3,7 +3,7 @@ build_name fl_conversion version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_directory/data/build/settings b/level_1/fl_directory/data/build/settings index 306ad6b58..c28aa8149 100644 --- a/level_1/fl_directory/data/build/settings +++ b/level_1/fl_directory/data/build/settings @@ -3,7 +3,7 @@ build_name fl_directory version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_environment/data/build/settings b/level_1/fl_environment/data/build/settings index c06f37693..09a1e42d3 100644 --- a/level_1/fl_environment/data/build/settings +++ b/level_1/fl_environment/data/build/settings @@ -3,7 +3,7 @@ build_name fl_environment version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_execute/data/build/settings b/level_1/fl_execute/data/build/settings index 6e0b71f1d..af96f4f31 100644 --- a/level_1/fl_execute/data/build/settings +++ b/level_1/fl_execute/data/build/settings @@ -3,7 +3,7 @@ build_name fl_execute version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_fss/data/build/settings b/level_1/fl_fss/data/build/settings index a660a2ffb..7a9076189 100644 --- a/level_1/fl_fss/data/build/settings +++ b/level_1/fl_fss/data/build/settings @@ -3,7 +3,7 @@ build_name fl_fss version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_iki/data/build/settings b/level_1/fl_iki/data/build/settings index 0646c7b29..b1877661a 100644 --- a/level_1/fl_iki/data/build/settings +++ b/level_1/fl_iki/data/build/settings @@ -3,7 +3,7 @@ build_name fl_iki version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_print/data/build/settings b/level_1/fl_print/data/build/settings index 26434c29f..3f7ccc432 100644 --- a/level_1/fl_print/data/build/settings +++ b/level_1/fl_print/data/build/settings @@ -3,7 +3,7 @@ build_name fl_print version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_signal/data/build/settings b/level_1/fl_signal/data/build/settings index 497e60a6d..49aff3a14 100644 --- a/level_1/fl_signal/data/build/settings +++ b/level_1/fl_signal/data/build/settings @@ -3,7 +3,7 @@ build_name fl_signal version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_string/data/build/settings b/level_1/fl_string/data/build/settings index 39d2e19c0..75fc00071 100644 --- a/level_1/fl_string/data/build/settings +++ b/level_1/fl_string/data/build/settings @@ -3,7 +3,7 @@ build_name fl_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_utf/data/build/settings b/level_1/fl_utf/data/build/settings index 3f8d5c5f1..2c3435e74 100644 --- a/level_1/fl_utf/data/build/settings +++ b/level_1/fl_utf/data/build/settings @@ -3,7 +3,7 @@ build_name fl_utf version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_1/fl_utf_file/data/build/settings b/level_1/fl_utf_file/data/build/settings index 5ad6add41..aa8a51ede 100644 --- a/level_1/fl_utf_file/data/build/settings +++ b/level_1/fl_utf_file/data/build/settings @@ -3,7 +3,7 @@ build_name fl_utf_file version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_control_group/data/build/settings b/level_2/fll_control_group/data/build/settings index 84ed69d4c..dd5ef54ae 100644 --- a/level_2/fll_control_group/data/build/settings +++ b/level_2/fll_control_group/data/build/settings @@ -3,7 +3,7 @@ build_name fll_control_group version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_error/c/error.c b/level_2/fll_error/c/error.c index 00b69f859..f48a32e42 100644 --- a/level_2/fll_error/c/error.c +++ b/level_2/fll_error/c/error.c @@ -34,7 +34,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QAccess denied while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QAccess denied while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -48,7 +48,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QCurrent user is not allowed to use the given group while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QCurrent user is not allowed to use the given group while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -62,7 +62,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QCurrent user is not allowed to use the given owner while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QCurrent user is not allowed to use the given owner while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -76,7 +76,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid directory while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QInvalid directory while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -90,7 +90,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', not empty.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -104,7 +104,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', already in an error state.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -118,7 +118,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -132,7 +132,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', failed to close.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -146,7 +146,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', is closed.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -160,7 +160,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFile descriptor error while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFile descriptor error while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -174,7 +174,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QMax file descriptors reached while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QMax file descriptors reached while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -188,7 +188,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid file descriptor while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QInvalid file descriptor while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -202,7 +202,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', %Q is empty.%]%r", print.to.stream, print.context, type_name, print.context, f_string_eol_s); @@ -216,7 +216,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', flush failed.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -230,7 +230,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', found.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -244,7 +244,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', could not find.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -258,7 +258,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', already open.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -272,7 +272,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QMax open files reached while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QMax open files reached while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -286,7 +286,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QOverflow while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QOverflow while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -300,7 +300,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', purge failed.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -314,7 +314,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QRead failed while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QRead failed while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -328,7 +328,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QSeek failed while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QSeek failed while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -342,7 +342,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QStat failed while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QStat failed while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -356,7 +356,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QSynchronize failed while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QSynchronize failed while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -370,7 +370,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q, the path '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q, the path '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[' is an unknown file type.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -384,7 +384,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUTF failure while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUTF failure while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -398,7 +398,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid UTF while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QInvalid UTF while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -412,7 +412,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnderflow while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnderflow while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -426,7 +426,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', write failure.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -440,7 +440,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QLoop while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QLoop while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -454,7 +454,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid %Q name '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, type_name, print.context); + fl_print_format("%[%QInvalid %Q name '%]", print.to.stream, print.context, print.prefix, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -468,7 +468,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QNumber overflow while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QNumber overflow while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -482,7 +482,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QNumber underflow while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QNumber underflow while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -496,7 +496,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid parameter", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QInvalid parameter", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -514,7 +514,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QProhibited by system while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QProhibited by system while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -528,7 +528,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', %Q is read only.%]%r", print.to.stream, print.context, type_name, print.context, f_string_eol_s); @@ -542,7 +542,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QUnable to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[', %Q is write only.%]%r", print.to.stream, print.context, type_name, print.context, f_string_eol_s); @@ -557,7 +557,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid or missing directory in path while trying to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QInvalid or missing directory in path while trying to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -571,7 +571,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q, the path '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q, the path '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[' is a directory.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -586,7 +586,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q, the path '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q, the path '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[' is a file.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -602,7 +602,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[' due to an invalid directory in the path.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -616,7 +616,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailed to %Q %Q, the path '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, operation, type_name, print.context); + fl_print_format("%[%QFailed to %Q %Q, the path '%]", print.to.stream, print.context, print.prefix, operation, type_name, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, name, print.notable); fl_print_format("%[' is a %Q.%]%r", print.to.stream, print.context, status == F_file_type_pipe ? fll_error_file_type_pipe_s : fll_error_file_type_socket_s, print.context, f_string_eol_s); @@ -638,7 +638,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument for the parameter '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%QThe argument for the parameter '%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, parameter, print.notable); fl_print_format("%[' must not be an empty string.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); @@ -652,7 +652,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%QThe argument '%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); fl_print_format("%[' is not a valid number for the parameter '%]", print.to.stream, print.context, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, parameter, print.notable); @@ -668,7 +668,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%QThe argument '%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); fl_print_format("%[' is negative, which is not allowed for the parameter '%]", print.to.stream, print.context, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, parameter, print.notable); @@ -684,7 +684,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%QThe argument '%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); fl_print_format("%[' is too large for the parameter '%]", print.to.stream, print.context, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, parameter, print.notable); @@ -700,7 +700,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%QThe argument '%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); fl_print_format("%[' is positive, which is not allowed for the parameter '%]", print.to.stream, print.context, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, parameter, print.notable); @@ -716,7 +716,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%QThe argument '%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); fl_print_format("%[' is too small for the parameter '%]", print.to.stream, print.context, print.context); fl_print_format("%[%Q%]", print.to.stream, print.notable, parameter, print.notable); diff --git a/level_2/fll_error/c/private-error.c b/level_2/fll_error/c/private-error.c index a8d7bc706..b56531358 100644 --- a/level_2/fll_error/c/private-error.c +++ b/level_2/fll_error/c/private-error.c @@ -12,7 +12,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QAccess denied", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QAccess denied", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -28,7 +28,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QMaximum array length reached", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QMaximum array length reached", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -44,7 +44,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QMaximum buffer length reached", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QMaximum buffer length reached", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -60,7 +60,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QAn error has occurred", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QAn error has occurred", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -76,7 +76,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFile not found", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QFile not found", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -92,7 +92,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUnable to allocate memory", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QUnable to allocate memory", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -108,7 +108,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid parameter", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QInvalid parameter", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -124,7 +124,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QMaximum string length reached", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QMaximum string length reached", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -140,7 +140,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid UTF-8 character found", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QInvalid UTF-8 character found", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -156,7 +156,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QUTF-8 character (fragment) found", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QUTF-8 character (fragment) found", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -172,7 +172,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInvalid (incomplete) UTF-8 character found", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QInvalid (incomplete) UTF-8 character found", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -196,7 +196,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QFailure", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QFailure", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -212,7 +212,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QSignal received", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QSignal received", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -228,7 +228,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%QInterrupt signal received", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%[%QInterrupt signal received", print.to.stream, print.context, print.prefix); private_fll_error_print_function(print, function); @@ -244,7 +244,7 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { flockfile(print.to.stream); - fl_print_format("%r%[%Q(%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%Q(%]", print.to.stream, print.context, print.prefix, print.context); fl_print_format("%[%ui%]%[)", print.to.stream, print.notable, status, print.notable, print.context); private_fll_error_print_function(print, function); diff --git a/level_2/fll_error/c/private-error.h b/level_2/fll_error/c/private-error.h index 143e02006..857460a02 100644 --- a/level_2/fll_error/c/private-error.h +++ b/level_2/fll_error/c/private-error.h @@ -16,7 +16,7 @@ extern "C" { #endif /** - * Private implementation of private_fll_error_print(). + * Private implementation of fll_error_print(). * * Intended to be shared to each of the different implementation variations. * @@ -61,7 +61,7 @@ extern "C" { * @see fll_error_file_print() */ #if !defined(_di_fll_error_print_) || !defined(_di_fll_error_file_print_) || !defined(_di_fll_error_number_print_) - void private_fll_error_print_function(const fl_print_t print, const char *function) F_attribute_visibility_internal_d; + extern void private_fll_error_print_function(const fl_print_t print, const char *function) F_attribute_visibility_internal_d; #endif // !defined(_di_fll_error_print_) || !defined(_di_fll_error_file_print_) || !defined(_di_fll_error_number_print_) #ifdef __cplusplus diff --git a/level_2/fll_error/data/build/settings b/level_2/fll_error/data/build/settings index c9014d106..5fd28d319 100644 --- a/level_2/fll_error/data/build/settings +++ b/level_2/fll_error/data/build/settings @@ -3,7 +3,7 @@ build_name fll_error version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_execute/data/build/settings b/level_2/fll_execute/data/build/settings index dbf1312c4..ec1d75146 100644 --- a/level_2/fll_execute/data/build/settings +++ b/level_2/fll_execute/data/build/settings @@ -3,7 +3,7 @@ build_name fll_execute version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_file/data/build/settings b/level_2/fll_file/data/build/settings index 4807a5fb8..dc6d19409 100644 --- a/level_2/fll_file/data/build/settings +++ b/level_2/fll_file/data/build/settings @@ -3,7 +3,7 @@ build_name fll_file version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_fss/data/build/settings b/level_2/fll_fss/data/build/settings index bd6edadc2..168c4b7d8 100644 --- a/level_2/fll_fss/data/build/settings +++ b/level_2/fll_fss/data/build/settings @@ -3,7 +3,7 @@ build_name fll_fss version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_fss_status_string/data/build/settings b/level_2/fll_fss_status_string/data/build/settings index e7e2f696c..56db0c0a4 100644 --- a/level_2/fll_fss_status_string/data/build/settings +++ b/level_2/fll_fss_status_string/data/build/settings @@ -3,7 +3,7 @@ build_name fll_fss_status_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_iki/data/build/settings b/level_2/fll_iki/data/build/settings index 329cf77f0..d46f4568d 100644 --- a/level_2/fll_iki/data/build/settings +++ b/level_2/fll_iki/data/build/settings @@ -3,7 +3,7 @@ build_name fll_iki version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_path/data/build/settings b/level_2/fll_path/data/build/settings index 042971ea3..dc00f9e8f 100644 --- a/level_2/fll_path/data/build/settings +++ b/level_2/fll_path/data/build/settings @@ -3,7 +3,7 @@ build_name fll_path version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_print/data/build/settings b/level_2/fll_print/data/build/settings index 7e7096097..641e4b2b3 100644 --- a/level_2/fll_print/data/build/settings +++ b/level_2/fll_print/data/build/settings @@ -3,7 +3,7 @@ build_name fll_print version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_program/c/private-program.c b/level_2/fll_program/c/private-program.c new file mode 100644 index 000000000..2971f6974 --- /dev/null +++ b/level_2/fll_program/c/private-program.c @@ -0,0 +1,69 @@ +#include "program.h" +#include "private-program.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#if !defined(_di_fll_program_print_help_option_) || !defined(_di_fll_program_print_help_option_standard_) + f_status_t private_fll_program_print_help_option(const f_file_t output, const f_color_context_t context, const f_string_static_t option_short, const f_string_static_t option_long, const f_string_static_t symbol_short, const f_string_static_t symbol_long, const char *description) { + + fl_print_format("%r %Q%[%Q%]", output.stream, f_string_eol_s, symbol_short, context.set.standout, option_short, context.set.standout); + fl_print_format(", %Q%[%Q%] %S", output.stream, symbol_long, context.set.standout, option_long, context.set.standout, description); + + return F_none; + } +#endif // !defined(_di_fll_program_print_help_option_) || !defined(_di_fll_program_print_help_option_standard_) + +#if !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_state_) + uint32_t private_fll_program_standard_signal_received(fll_program_data_t * const main) { + + if (!main || main->signal.id == -1) return 0; + + struct signalfd_siginfo information; + + memset(&information, 0, sizeof(struct signalfd_siginfo)); + + if (f_signal_read(main->signal, 0, &information) == F_signal) { + switch (information.ssi_signo) { + case F_signal_abort: + case F_signal_broken_pipe: + case F_signal_hangup: + case F_signal_interrupt: + case F_signal_quit: + case F_signal_termination: + main->signal_received = information.ssi_signo; + + return information.ssi_signo; + } + } + + return 0; + } +#endif // !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_state_) + +#if !defined(_di_fll_program_parameter_process_context_) || !defined(_di_fll_program_parameter_process_empty_) + void private_fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]) { + + context->set.error = f_color_set_empty_s; + context->set.important = f_color_set_empty_s; + context->set.normal = f_color_set_empty_s; + context->set.normal_reset = f_color_set_empty_s; + context->set.notable = f_color_set_empty_s; + context->set.reset = f_color_set_empty_s; + context->set.standout = f_color_set_empty_s; + context->set.success = f_color_set_empty_s; + context->set.title = f_color_set_empty_s; + context->set.warning = f_color_set_empty_s; + + if (sets) { + for (f_array_length_t i = 0; sets[i]; ++i) { + *sets[i] = f_color_set_empty_s; + } // for + } + } +#endif // !defined(_di_fll_program_parameter_process_context_) || !defined(_di_fll_program_parameter_process_empty_) + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_2/fll_program/c/private-program.h b/level_2/fll_program/c/private-program.h new file mode 100644 index 000000000..79c86da45 --- /dev/null +++ b/level_2/fll_program/c/private-program.h @@ -0,0 +1,94 @@ +/** + * FLL - Level 2 + * + * Project: Program + * API Version: 0.7 + * Licenses: lgpl-2.1-or-later + * + * These are provided for internal reduction in redundant code. + * These should not be exposed/used outside of this project. + */ +#ifndef _PRIVATE_FLL_program_h +#define _PRIVATE_FLL_program_h + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Print standard help option. + * + * This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called. + * + * @param output + * The file stream to output to. + * @param context + * The color context. + * @param option_short + * The short name of the option. + * @param option_long + * The long name of the option. + * @param symbol_short + * The short symbol of the option. + * @param symbol_long + * The long symbol of the option. + * @param description + * A desciption associated with the option. + * + * @return + * F_none on success. + * + * @see f_print_terminated() + * @see fl_print_format() + * + * @see fll_program_print_help_option() + * @see fll_program_print_help_option_standard() + */ +#if !defined(_di_fll_program_print_help_option_) || !defined(_di_fll_program_print_help_option_standard_) + extern f_status_t private_fll_program_print_help_option(const f_file_t output, const f_color_context_t context, const f_string_static_t option_short, const f_string_static_t option_long, const f_string_static_t symbol_short, const f_string_static_t symbol_long, const char *description) F_attribute_visibility_internal_d; +#endif // !defined(_di_fll_program_print_help_option_) || !defined(_di_fll_program_print_help_option_standard_) + +/** + * Private implementation of fll_program_standard_signal_received(). + * + * Intended to be shared to each of the different implementation variations. + * + * @param main + * The main program data. + * + * @return + * A positive number representing a valid signal on signal received. + * 0 on no signal received or when main is NULL. + * + * @see f_signal_read() + * + * @see fll_program_standard_signal_received() + * @see fll_program_standard_signal_state() + */ +#if !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_state_) + uint32_t private_fll_program_standard_signal_received(fll_program_data_t * const main) F_attribute_visibility_internal_d; +#endif // !defined(_di_fll_program_standard_signal_received_) || !defined(_di_fll_program_standard_signal_state_) + +/** + * Private implementation of fll_program_parameter_process_empty(). + * + * Intended to be shared to each of the different implementation variations. + * + * @param context + * The primary color context to assign. + * @param sets + * (optional) A NULL terminated array representing additional sets to assign as empty. + * Set to NULL to not use. + * + * @see fll_program_parameter_process_context() + * @see fll_program_parameter_process_empty() + */ +#if !defined(_di_fll_program_parameter_process_context_) || !defined(_di_fll_program_parameter_process_empty_) + extern void private_fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]) F_attribute_visibility_internal_d; +#endif // !defined(_di_fll_program_parameter_process_context_) || !defined(_di_fll_program_parameter_process_empty_) + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _PRIVATE_FLL_program_h diff --git a/level_2/fll_program/c/program.c b/level_2/fll_program/c/program.c index 902e7ca9d..7ba650fc2 100644 --- a/level_2/fll_program/c/program.c +++ b/level_2/fll_program/c/program.c @@ -1,4 +1,5 @@ #include "program.h" +#include "private-program.h" #ifdef __cplusplus extern "C" { @@ -7,7 +8,7 @@ extern "C" { #ifndef _di_fll_program_print_help_header_ f_status_t fll_program_print_help_header(const f_file_t output, const f_color_context_t context, const f_string_static_t name, const f_string_static_t version) { - fl_print_format("%r %[%Q%]%r", output.stream, f_string_eol_s, context.set.title, name, context.set.title, f_string_eol_s); + fl_print_format(" %[%Q%]%r", output.stream, context.set.title, name, context.set.title, f_string_eol_s); fl_print_format(" %[Version %Q%]%r", output.stream, context.set.notable, version, context.set.notable, f_string_eol_s); fl_print_format("%r %[Available Options:%] ", output.stream, f_string_eol_s, context.set.important, context.set.important); @@ -19,12 +20,29 @@ extern "C" { #ifndef _di_fll_program_print_help_option_ f_status_t fll_program_print_help_option(const f_file_t output, const f_color_context_t context, const f_string_static_t option_short, const f_string_static_t option_long, const f_string_static_t symbol_short, const f_string_static_t symbol_long, const char *description) { - fl_print_format("%r %Q%[%Q%]", output.stream, f_string_eol_s, symbol_short, context.set.standout, option_short, context.set.standout); - fl_print_format(", %Q%[%Q%] %S", output.stream, symbol_long, context.set.standout, option_long, context.set.standout, description); + return private_fll_program_print_help_option(output, context, option_short, option_long, symbol_short, symbol_long, description); + } +#endif // _di_fll_program_print_help_option_ + +#ifndef _di_fll_program_print_help_option_standard_ + f_status_t fll_program_print_help_option_standard(const f_file_t output, const f_color_context_t context) { + + private_fll_program_print_help_option(output, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); + private_fll_program_print_help_option(output, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); + private_fll_program_print_help_option(output, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); + private_fll_program_print_help_option(output, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Do not print using color."); + private_fll_program_print_help_option(output, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); + private_fll_program_print_help_option(output, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); + private_fll_program_print_help_option(output, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); + private_fll_program_print_help_option(output, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); + private_fll_program_print_help_option(output, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); + private_fll_program_print_help_option(output, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + private_fll_program_print_help_option(output, context, f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Disable printing of first line."); + private_fll_program_print_help_option(output, context, f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Disable printing of last line."); return F_none; } -#endif // _di_fll_program_print_help_option_ +#endif // _di_fll_program_print_help_option_standard_ #ifndef _di_fll_program_print_help_option_long_ f_status_t fll_program_print_help_option_long(const f_file_t output, const f_color_context_t context, const f_string_static_t option_long, const f_string_static_t symbol_long, const char *description) { @@ -56,7 +74,7 @@ extern "C" { fl_print_format(" %[[%] %Q %[]%]", output.stream, context.set.notable, context.set.notable, parameters, context.set.notable, context.set.notable); } - fl_print_format("%r%r", output.stream, f_string_eol_s, f_string_eol_s); + f_print_dynamic_raw(f_string_eol_s, output.stream); return F_none; } @@ -72,34 +90,37 @@ extern "C" { } #endif // _di_fll_program_print_version_ -#ifndef _di_fll_program_parameter_process_ - f_status_t fll_program_parameter_process(const f_console_arguments_t arguments, const f_console_parameter_ids_t choices, const bool right, fll_program_data_t * const main) { - - f_status_t status = f_console_parameter_process(arguments, &main->parameters); - if (F_status_is_error(status)) return status; +#ifndef _di_fll_program_parameter_process_context_ + f_status_t fll_program_parameter_process_context(const f_uint16s_t choices, const uint8_t modes[], const bool right, fll_program_data_t * const main) { { - f_console_parameter_id_t decision = choices.id[2]; + if (choices.used) { + f_status_t status = F_none; + f_array_length_t decision = 0; - if (right) { - status = f_console_parameter_prioritize_right(main->parameters, choices, &decision); - } - else { - status = f_console_parameter_prioritize_left(main->parameters, choices, &decision); - } + if (right) { + status = f_console_parameter_prioritize_right(main->parameters, choices, &decision); + } + else { + status = f_console_parameter_prioritize_left(main->parameters, choices, &decision); + } - if (F_status_is_error(status)) return status; + if (F_status_is_error(status)) return status; - // Load colors unless told not to. - if (decision == choices.id[0]) { - main->context.mode = F_color_mode_no_color_d; + if (status == F_data_not) { + main->context.mode = modes[choices.used - 1]; + } + else { + main->context.mode = modes[decision]; + } + + if (main->context.mode == f_color_mode_dark_e || main->context.mode == f_color_mode_light_e) { + status = f_color_load_context(main->context.mode, &main->context); + if (F_status_is_error(status)) return status; + } } else { - // @todo update this once macro_f_color_context_t_new is turned into a function. - macro_f_color_context_t_new(status, main->context); - if (F_status_is_error(status)) return status; - - status = f_color_load_context(decision == choices.id[1], &main->context); + main->context.mode = f_color_mode_color_not_e; } } @@ -124,50 +145,50 @@ extern "C" { else { f_color_set_t *sets[] = { &main->message.context, &main->message.notable, &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; - fll_program_parameter_process_empty(&main->context, sets); + private_fll_program_parameter_process_empty(&main->context, sets); } return F_none; } -#endif // _di_fll_program_parameter_process_ +#endif // _di_fll_program_parameter_process_context_ #ifndef _di_fll_program_parameter_process_empty_ - void fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]) { - - context->set.error = f_color_set_empty_s; - context->set.important = f_color_set_empty_s; - context->set.normal = f_color_set_empty_s; - context->set.normal_reset = f_color_set_empty_s; - context->set.notable = f_color_set_empty_s; - context->set.reset = f_color_set_empty_s; - context->set.standout = f_color_set_empty_s; - context->set.success = f_color_set_empty_s; - context->set.title = f_color_set_empty_s; - context->set.warning = f_color_set_empty_s; - - if (sets) { - for (f_array_length_t i = 0; sets[i]; ++i) { - *sets[i] = f_color_set_empty_s; - } // for - } + f_status_t fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]) { + #ifndef _di_level_2_parameter_checking_ + if (!context) return F_status_set_error(F_parameter); + if (!sets) return F_status_set_error(F_parameter); + #endif // _di_level_2_parameter_checking_ + + private_fll_program_parameter_process_empty(context, sets); + + return F_none; } #endif // _di_fll_program_parameter_process_empty_ #ifndef _di_fll_program_parameter_process_verbosity_ - f_status_t fll_program_parameter_process_verbosity(const f_console_parameter_ids_t choices, const bool right, const uint8_t verbosity[], fll_program_data_t * const main) { + f_status_t fll_program_parameter_process_verbosity(const f_uint16s_t choices, const uint8_t verbosity[], const bool right, fll_program_data_t * const main) { + #ifndef _di_level_2_parameter_checking_ + if (!main) return F_status_set_error(F_parameter); + #endif // _di_level_2_parameter_checking_ - f_console_parameter_id_t choice = 0; + if (!choices.used) return F_data_not; - const f_status_t status = right ? - f_console_parameter_prioritize_right(main->parameters, choices, &choice) : - f_console_parameter_prioritize_left(main->parameters, choices, &choice); + f_array_length_t choice = 0; - if (F_status_is_error(status)) return status; + { + const f_status_t status = right ? f_console_parameter_prioritize_right(main->parameters, choices, &choice) : f_console_parameter_prioritize_left(main->parameters, choices, &choice); + + if (F_status_is_error(status)) return status; + + if (status == F_data_not) { + choice = choices.used - 1; + } + } main->message.verbosity = verbosity[choice]; - main->output.verbosity = verbosity[choice]; - main->error.verbosity = verbosity[choice]; - main->warning.verbosity = verbosity[choice]; + main->output.verbosity = main->message.verbosity; + main->error.verbosity = main->message.verbosity; + main->warning.verbosity = main->message.verbosity; return F_none; } @@ -181,7 +202,6 @@ extern "C" { #endif // _di_level_2_parameter_checking_ f_status_t status = F_none; - const f_array_length_t start = destination->used; for (f_array_length_t i = 0; i < values.used; ++i) { @@ -204,9 +224,10 @@ extern "C" { } } // for - if (status == F_none && start == destination->used) return F_data_not; + if (F_status_is_error(status)) return status; + if (start == destination->used) return F_data_not; - return status; + return F_none; } #endif // _di_fll_program_parameter_additional_append_ @@ -218,7 +239,6 @@ extern "C" { #endif // _di_level_2_parameter_checking_ f_status_t status = F_none; - const f_array_length_t start = destination->used; for (f_array_length_t i = 0; i < values.used; ++i) { @@ -229,9 +249,10 @@ extern "C" { } } // for - if (status == F_none && start == destination->used) return F_data_not; + if (F_status_is_error(status)) return status; + if (start == destination->used) return F_data_not; - return status; + return F_none; } #endif // _di_fll_program_parameter_additional_mash_ @@ -265,9 +286,10 @@ extern "C" { } } // for - if (status == F_none && start == destination->used) return F_data_not; + if (F_status_is_error(status)) return status; + if (start == destination->used) return F_data_not; - return status; + return F_none; } #endif // _di_fll_program_parameter_additional_rip_ @@ -279,7 +301,6 @@ extern "C" { #endif // _di_level_2_parameter_checking_ f_status_t status = F_none; - const f_array_length_t start = destination->used; f_string_dynamic_t ripped = f_string_dynamic_t_initialize; @@ -300,9 +321,10 @@ extern "C" { f_string_dynamic_resize(0, &ripped); - if (status == F_none && start == destination->used) return F_data_not; + if (F_status_is_error(status)) return status; + if (start == destination->used) return F_data_not; - return status; + return F_none; } #endif // _di_fll_program_parameter_additional_rip_mash_ @@ -326,7 +348,7 @@ extern "C" { #ifndef _di_fll_program_standard_set_down_ f_status_t fll_program_standard_set_down(fll_program_data_t * const main) { #ifndef _di_level_2_parameter_checking_ - if (!signal) return F_status_set_error(F_parameter); + if (!main) return F_status_set_error(F_parameter); #endif // _di_level_2_parameter_checking_ // The fclose() calls have undefined behavior when closing an already closed file. @@ -337,7 +359,7 @@ extern "C" { if (main->message.to.id == -1) { if (main->message.to.stream != 0 && main->message.to.stream != F_type_error_d && main->message.to.stream != F_type_input_d && main->message.to.stream != F_type_output_d) { - f_file_stream_flush(&main->message.to); + f_file_stream_flush(main->message.to); flag |= 0x1; } @@ -353,7 +375,7 @@ extern "C" { if (main->output.to.id == -1) { if (main->output.to.stream && main->output.to.stream != main->message.to.stream) { if (main->output.to.stream != F_type_error_d && main->output.to.stream != F_type_input_d && main->output.to.stream != F_type_output_d) { - f_file_stream_flush(&main->output.to); + f_file_stream_flush(main->output.to); flag |= 0x2; } @@ -370,7 +392,7 @@ extern "C" { if (main->error.to.id == -1) { if (main->error.to.stream && main->error.to.stream != main->message.to.stream && main->error.to.stream != main->output.to.stream) { if (main->error.to.stream != F_type_error_d && main->error.to.stream != F_type_input_d && main->error.to.stream != F_type_output_d) { - f_file_stream_flush(&main->error.to); + f_file_stream_flush(main->error.to); flag |= 0x4; } @@ -387,7 +409,7 @@ extern "C" { if (main->warning.to.id == -1) { if (main->warning.to.stream && main->warning.to.stream != main->message.to.stream && main->warning.to.stream != main->output.to.stream && main->warning.to.stream != main->error.to.stream) { if (main->warning.to.stream != F_type_error_d && main->warning.to.stream != F_type_input_d && main->warning.to.stream != F_type_output_d) { - f_file_stream_flush(&main->warning.to); + f_file_stream_flush(main->warning.to); flag |= 0x8; } @@ -405,7 +427,7 @@ extern "C" { if (main->debug.to.id == -1) { if (main->debug.to.stream && main->debug.to.stream != main->message.to.stream && main->debug.to.stream != main->output.to.stream && main->debug.to.stream != main->error.to.stream && main->debug.to.stream != main->warning.to.stream) { if (main->debug.to.stream != F_type_error_d && main->debug.to.stream != F_type_input_d && main->debug.to.stream != F_type_output_d) { - f_file_stream_flush(&main->debug.to); + f_file_stream_flush(main->debug.to); flag |= 0x10; } @@ -469,7 +491,7 @@ extern "C" { file.stream = F_type_output_d; flag |= 0x1; - f_file_stream_flush(&file); + f_file_stream_flush(file); } else { if (F_type_descriptor_output_d != -1) { @@ -484,7 +506,7 @@ extern "C" { file.stream = F_type_error_d; flag |= 0x2; - f_file_stream_flush(&file); + f_file_stream_flush(file); } else { if (F_type_descriptor_error_d != -1) { @@ -499,7 +521,7 @@ extern "C" { file.stream = F_type_input_d; flag |= 0x4; - f_file_stream_flush(&file); + f_file_stream_flush(file); } else { if (F_type_descriptor_input_d != -1) { @@ -601,45 +623,26 @@ extern "C" { #endif // _di_fll_program_standard_set_up_ #ifndef _di_fll_program_standard_signal_received_ - f_status_t fll_program_standard_signal_received(fll_program_data_t * const main) { - - if (!main || main->signal.id == -1) return F_false; - - struct signalfd_siginfo information; - - memset(&information, 0, sizeof(struct signalfd_siginfo)); - - if (f_signal_read(main->signal, 0, &information) == F_signal) { - switch (information.ssi_signo) { - case F_signal_abort: - case F_signal_broken_pipe: - case F_signal_hangup: - case F_signal_interrupt: - case F_signal_quit: - case F_signal_termination: - main->signal_received = information.ssi_signo; - - return information.ssi_signo; - } - } + uint32_t fll_program_standard_signal_received(fll_program_data_t * const main) { + #ifndef _di_level_2_parameter_checking_ + if (!main) return 0; + #endif // _di_level_2_parameter_checking_ - return F_false; + return private_fll_program_standard_signal_received(main); } #endif // _di_fss_basic_read_signal_received_ #ifndef _di_fll_program_standard_signal_state_ f_status_t fll_program_standard_signal_state(void * const state, void * const internal) { - if (!state) { - return F_interrupt_not; - } + if (!state) return F_interrupt_not; f_state_t *state_ptr = (f_state_t *) state; if (!state_ptr->custom) return F_interrupt_not; fll_program_data_t *custom = (fll_program_data_t *) state_ptr->custom; - custom->signal_received = fll_program_standard_signal_received(custom); + custom->signal_received = private_fll_program_standard_signal_received(custom); if (custom->signal_received == F_signal_abort || custom->signal_received == F_signal_broken_pipe || custom->signal_received == F_signal_hangup || custom->signal_received == F_signal_interrupt || custom->signal_received == F_signal_quit || custom->signal_received == F_signal_termination) { return F_status_set_error(F_interrupt); diff --git a/level_2/fll_program/c/program.h b/level_2/fll_program/c/program.h index 078456afb..22a71cee1 100644 --- a/level_2/fll_program/c/program.h +++ b/level_2/fll_program/c/program.h @@ -140,6 +140,26 @@ extern "C" { extern f_status_t fll_program_print_help_option_other(const f_file_t output, const f_color_context_t context, const f_string_static_t option_other, const char *description); #endif // _di_fll_program_print_help_option_other_ +/** + * Print all standard help options. + * + * This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called. + * + * @param output + * The file stream to output to. + * @param context + * The color context. + * + * @return + * F_none on success. + * + * @see f_print_terminated() + * @see fl_print_format() + */ +#ifndef _di_fll_program_print_help_option_standard_ + extern f_status_t fll_program_print_help_option_standard(const f_file_t output, const f_color_context_t context); +#endif // _di_fll_program_print_help_option_standard_ + /** * Print standard help usage. * @@ -186,13 +206,17 @@ extern "C" { #endif // _di_fll_program_print_version_ /** - * Perform basic parameter loading, including initialization of color context. + * Determine the color context from the parameters and then set the color context based on the choice. + * + * This will allow for the color context and the color sets to be safely used when colors are disabled. * - * @param arguments - * The parameters passed to the process. * @param choices - * A set of the color options: no-color option, light-color option, dark-color option. - * This must have its used size set to 3 and the ids are expected to be in this order: no_color, light, and dark. + * An array of color modes. + * The default, if no mode is specified, will be the last value in the array. + * @param modes + * An array designating the context modes associated with each choice. + * This must exactly match the size of the choices array. + * No bounds checking is performed. * @param right * If TRUE, use the right-most parameter on conflict. * If FALSE, use the left-most parameter on conflict. @@ -208,17 +232,15 @@ extern "C" { * * Errors (with error bit) from: f_console_parameter_prioritize_left(). * Errors (with error bit) from: f_console_parameter_prioritize_right(). - * Errors (with error bit) from: f_console_parameter_process(). * Errors (with error bit) from: f_color_load_context(). * * @see f_console_parameter_prioritize_left() * @see f_console_parameter_prioritize_right() - * @see f_console_parameter_process() * @see f_color_load_context() */ -#ifndef _di_fll_program_parameter_process_ - extern f_status_t fll_program_parameter_process(const f_console_arguments_t arguments, const f_console_parameter_ids_t choices, const bool right, fll_program_data_t * const main); -#endif // _di_fll_program_parameter_process_ +#ifndef _di_fll_program_parameter_process_context_ + extern f_status_t fll_program_parameter_process_context(const f_uint16s_t choices, const uint8_t modes[], const bool right, fll_program_data_t * const main); +#endif // _di_fll_program_parameter_process_context_ /** * Set the provided context to empty along with all additional color sets. @@ -230,9 +252,14 @@ extern "C" { * @param sets * (optional) A NULL terminated array representing additional sets to assign as empty. * Set to NULL to not use. + * + * @return + * F_none on success. + * + * F_parameter (with error bit) if a parameter is invalid. */ #ifndef _di_fll_program_parameter_process_empty_ - extern void fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]); + extern f_status_t fll_program_parameter_process_empty(f_color_context_t * const context, f_color_set_t * const sets[]); #endif // _di_fll_program_parameter_process_empty_ /** @@ -240,18 +267,22 @@ extern "C" { * * @param choices * The available choices based on parameter ids. - * @param right - * If TRUE, use the right-most parameter on conflict. - * If FALSE, use the left-most parameter on conflict. + * The default, if no verbosity is specified, will be the last value in the array. * @param verbosity * An array designating what to set the verbosity to based on the choice made. * This must exactly match the size of the choices array. * No bounds checking is performed. + * @param right + * If TRUE, use the right-most parameter on conflict. + * If FALSE, use the left-most parameter on conflict. * @param main * The main program data. * * @return * F_none on success. + * F_data_not on success but choices.used is 0. + * + * F_parameter (with error bit) if a parameter is invalid. * * Errors (with error bit) from: f_console_parameter_prioritize_left(). * Errors (with error bit) from: f_console_parameter_prioritize_right(). @@ -260,7 +291,7 @@ extern "C" { * @see f_console_parameter_prioritize_right() */ #ifndef _di_fll_program_parameter_process_verbosity_ - extern f_status_t fll_program_parameter_process_verbosity(const f_console_parameter_ids_t choices, const bool right, const uint8_t verbosity[], fll_program_data_t * const main); + extern f_status_t fll_program_parameter_process_verbosity(const f_uint16s_t choices, const uint8_t verbosity[], const bool right, fll_program_data_t * const main); #endif // _di_fll_program_parameter_process_verbosity_ /** @@ -473,13 +504,13 @@ extern "C" { * * @return * A positive number representing a valid signal on signal received. - * F_false on no signal received or when main is NULL. + * 0 on no signal received or when main is NULL. * * @see f_signal_read() */ -#ifndef _di_fss_basic_read_signal_received_ - extern f_status_t fll_program_standard_signal_received(fll_program_data_t * const main); -#endif // _di_fss_basic_read_signal_received_ +#ifndef _di_fll_program_standard_signal_received_ + extern uint32_t fll_program_standard_signal_received(fll_program_data_t * const main); +#endif // _di_fll_program_standard_signal_received_ /** * Standardized callback for checking for interrupts via the f_state_t interrupt callback. @@ -496,6 +527,8 @@ extern "C" { * * When one of the above signals is both blocked and received, then this calls fll_program_standard_signal_received(). * + * As a callback, this does not perform the standard parameter checking. + * * @param state * The state data. * This must be of type (f_state_t *). diff --git a/level_2/fll_program/c/program/common.h b/level_2/fll_program/c/program/common.h index b31c7106e..283a6696c 100644 --- a/level_2/fll_program/c/program/common.h +++ b/level_2/fll_program/c/program/common.h @@ -55,7 +55,8 @@ extern "C" { * The umask() has design flaws as per specification that requires the umask be changed to read the value! * As a work-around, a umask variable is provided here so that umask() only ever need be called once. * - * parameters: The state of pre-defined parameters passed to the program. + * parameters: The state of pre-defined parameters passed to the program. + * environment: Environment variables passed to the program. * * umask: The umask settings, needed for avoiding calls to umask() to read the current umask. * pid: The PID of the program. @@ -76,6 +77,7 @@ extern "C" { #ifndef _di_fll_program_data_t_ typedef struct { f_console_parameters_t parameters; + const f_string_t * environment; mode_t umask; pid_t pid; @@ -101,6 +103,7 @@ extern "C" { 0, \ 0, \ 0, \ + 0, \ fll_program_data_pipe_none_e, \ 0, \ 0, \ @@ -113,7 +116,9 @@ extern "C" { f_color_context_t_initialize, \ } - #define macro_fll_program_data_t_initialize(umask, pid, child, pipe, signal_received, signal_check, signal, message, output, error, warning, debug, context) { \ + #define macro_fll_program_data_t_initialize(parameters, environment, umask, pid, child, pipe, signal_received, signal_check, signal, message, output, error, warning, debug, context) { \ + parameters, \ + environment, \ umask, \ pid, \ child, \ diff --git a/level_2/fll_program/data/build/settings b/level_2/fll_program/data/build/settings index c1aebaf65..76dcafb25 100644 --- a/level_2/fll_program/data/build/settings +++ b/level_2/fll_program/data/build/settings @@ -3,7 +3,7 @@ build_name fll_program version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor @@ -20,7 +20,7 @@ build_language c build_libraries -lc build_libraries-individual -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_memory -lf_print -lf_signal -lf_string -lf_type_array -lf_utf -build_sources_library program.c program/common.c +build_sources_library program.c program/common.c private-program.c build_sources_headers program.h program/common.h diff --git a/level_2/fll_status_string/c/status_string.c b/level_2/fll_status_string/c/status_string.c index 981f5166e..0da83004c 100644 --- a/level_2/fll_status_string/c/status_string.c +++ b/level_2/fll_status_string/c/status_string.c @@ -1116,6 +1116,18 @@ extern "C" { return F_none; } + if (fl_string_dynamic_compare(name, f_status_help_s) == F_equal_to) { + *code = F_help; + + return F_none; + } + + if (fl_string_dynamic_compare(name, f_status_help_not_s) == F_equal_to) { + *code = F_help_not; + + return F_none; + } + if (fl_string_dynamic_compare(name, f_status_ignore_s) == F_equal_to) { *code = F_ignore; diff --git a/level_2/fll_status_string/data/build/settings b/level_2/fll_status_string/data/build/settings index 6219da9b4..d3970d428 100644 --- a/level_2/fll_status_string/data/build/settings +++ b/level_2/fll_status_string/data/build/settings @@ -3,7 +3,7 @@ build_name fll_status_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_2/fll_status_string/data/build/settings-tests b/level_2/fll_status_string/data/build/settings-tests index 2c8f21d73..7ddb2d2b1 100644 --- a/level_2/fll_status_string/data/build/settings-tests +++ b/level_2/fll_status_string/data/build/settings-tests @@ -8,7 +8,7 @@ build_name test-fll_status_string version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file major version_target major diff --git a/level_2/fll_status_string/tests/unit/c/test-status_string-from.c b/level_2/fll_status_string/tests/unit/c/test-status_string-from.c index 585e37f90..529a76a80 100644 --- a/level_2/fll_status_string/tests/unit/c/test-status_string-from.c +++ b/level_2/fll_status_string/tests/unit/c/test-status_string-from.c @@ -225,6 +225,8 @@ void test__fll_status_string_from__works(void **state) { F_halt_not, F_header, F_header_not, + F_help, + F_help_not, F_ignore, F_ignore_not, F_implemented, @@ -815,6 +817,8 @@ void test__fll_status_string_from__works(void **state) { f_status_halt_not_s, f_status_header_s, f_status_header_not_s, + f_status_help_s, + f_status_help_not_s, f_status_ignore_s, f_status_ignore_not_s, f_status_implemented_s, @@ -1225,7 +1229,7 @@ void test__fll_status_string_from__works(void **state) { f_status_status_code_last_s, }; - for (uint16_t i = 0; i < 587; ++i) { + for (uint16_t i = 0; i < 589; ++i) { f_status_t result = F_none; diff --git a/level_3/byte_dump/c/byte_dump.c b/level_3/byte_dump/c/byte_dump.c index 427bc3461..bbeb216b0 100644 --- a/level_3/byte_dump/c/byte_dump.c +++ b/level_3/byte_dump/c/byte_dump.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, byte_dump_program_name_long_s, byte_dump_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -57,6 +52,10 @@ extern "C" { fll_program_print_help_usage(file, context, byte_dump_program_name_s, fll_program_parameter_filenames_s); + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fl_print_format(" When using the %[%r%r%] option, some UTF-8 characters may be replaced by your instance and cause display alignment issues.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, byte_dump_long_text_s, context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" Special UTF-8 characters and non-spacing UTF-8 characters may be replaced with a space (or a placeholder when the %[%r%r%] option is used).%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, byte_dump_long_placeholder_s, context.set.notable, f_string_eol_s, f_string_eol_s); @@ -65,9 +64,13 @@ extern "C" { fl_print_format(" When %[%r%r%] is used, any UTF-8 sequences will still be printed in full should any part is found within the requested range.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, byte_dump_long_last_s, context.set.notable, f_string_eol_s, f_string_eol_s); - fl_print_format(" When using the %[%r%r%] option, invalid Unicode will fallback to being displayed using one of the other modes.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, byte_dump_long_unicode_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" When using the %[%r%r%] option, invalid Unicode will fallback to being displayed using one of the other modes.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, byte_dump_long_unicode_s, context.set.notable, f_string_eol_s); - fflush(file.stream); + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -75,82 +78,50 @@ extern "C" { #endif // _di_byte_dump_print_help_ #ifndef _di_byte_dump_main_ - f_status_t byte_dump_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t byte_dump_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - // Identify priority of color parameters. - { - f_console_parameter_id_t ids[3] = { byte_dump_parameter_no_color_e, byte_dump_parameter_light_e, byte_dump_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { byte_dump_parameter_no_color_e, byte_dump_parameter_light_e, byte_dump_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; - - fll_program_parameter_process_empty(&main->context, sets); - } - - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - return F_status_set_error(status); + return; + } } - } - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { byte_dump_parameter_verbosity_quiet_e, byte_dump_parameter_verbosity_error_e, byte_dump_parameter_verbosity_normal_e, byte_dump_parameter_verbosity_verbose_e, byte_dump_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { byte_dump_parameter_verbosity_quiet_e, byte_dump_parameter_verbosity_error_e, byte_dump_parameter_verbosity_verbose_e, byte_dump_parameter_verbosity_debug_e, byte_dump_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == byte_dump_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == byte_dump_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == byte_dump_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == byte_dump_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == byte_dump_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -160,9 +131,9 @@ extern "C" { // Identify priority of mode parameters. { - f_console_parameter_id_t ids[5] = { byte_dump_parameter_hexidecimal_e, byte_dump_parameter_duodecimal_e, byte_dump_parameter_octal_e, byte_dump_parameter_binary_e, byte_dump_parameter_decimal_e }; - f_console_parameter_id_t choice = byte_dump_parameter_hexidecimal_e; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + uint16_t choices_array[5] = { byte_dump_parameter_hexidecimal_e, byte_dump_parameter_duodecimal_e, byte_dump_parameter_octal_e, byte_dump_parameter_binary_e, byte_dump_parameter_decimal_e }; + f_array_length_t choice = 0; + const f_uint16s_t choices = macro_f_uint16s_t_initialize(choices_array, 0, 5); status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); @@ -172,28 +143,28 @@ extern "C" { return F_status_set_error(status); } - if (choice == byte_dump_parameter_hexidecimal_e) { + if (choices.array[choice] == byte_dump_parameter_hexidecimal_e) { data.mode = byte_dump_mode_hexidecimal_e; } - else if (choice == byte_dump_parameter_duodecimal_e) { + else if (choices.array[choice] == byte_dump_parameter_duodecimal_e) { data.mode = byte_dump_mode_duodecimal_e; } - else if (choice == byte_dump_parameter_octal_e) { + else if (choices.array[choice] == byte_dump_parameter_octal_e) { data.mode = byte_dump_mode_octal_e; } - else if (choice == byte_dump_parameter_binary_e) { + else if (choices.array[choice] == byte_dump_parameter_binary_e) { data.mode = byte_dump_mode_binary_e; } - else if (choice == byte_dump_parameter_decimal_e) { + else if (choices.array[choice] == byte_dump_parameter_decimal_e) { data.mode = byte_dump_mode_decimal_e; } } // Identify priority of presentation parameters. { - f_console_parameter_id_t ids[3] = { byte_dump_parameter_normal_e, byte_dump_parameter_simple_e, byte_dump_parameter_classic_e }; - f_console_parameter_id_t choice = byte_dump_parameter_normal_e; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + uint16_t choices_array[3] = { byte_dump_parameter_normal_e, byte_dump_parameter_simple_e, byte_dump_parameter_classic_e }; + f_array_length_t choice = 0; + const f_uint16s_t choices = macro_f_uint16s_t_initialize(choices_array, 0, 3); status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); @@ -203,22 +174,22 @@ extern "C" { return F_status_set_error(status); } - if (choice == byte_dump_parameter_normal_e) { + if (choices.array[choice] == byte_dump_parameter_normal_e) { data.presentation = byte_dump_presentation_normal_e; } - else if (choice == byte_dump_parameter_simple_e) { + else if (choices.array[choice] == byte_dump_parameter_simple_e) { data.presentation = byte_dump_presentation_simple_e; } - else if (choice == byte_dump_parameter_classic_e) { + else if (choices.array[choice] == byte_dump_parameter_classic_e) { data.presentation = byte_dump_presentation_classic_e; } } // Identify priority of narrow and wide parameters. { - f_console_parameter_id_t ids[2] = { byte_dump_parameter_narrow_e, byte_dump_parameter_wide_e }; - f_console_parameter_id_t choice = byte_dump_parameter_wide_e; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 2); + uint16_t choices_array[2] = { byte_dump_parameter_narrow_e, byte_dump_parameter_wide_e }; + f_array_length_t choice = byte_dump_parameter_wide_e; + const f_uint16s_t choices = macro_f_uint16s_t_initialize(choices_array, 0, 2); status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); @@ -228,12 +199,12 @@ extern "C" { return F_status_set_error(status); } - if (choice == byte_dump_parameter_narrow_e) { + if (choices.array[choice] == byte_dump_parameter_narrow_e) { if (data.options & byte_dump_option_wide_d) { data.options -= byte_dump_option_wide_d; } } - else if (choice == byte_dump_parameter_wide_e) { + else if (choices.array[choice] == byte_dump_parameter_wide_e) { data.options |= byte_dump_option_wide_d; } } @@ -252,7 +223,7 @@ extern "C" { return F_none; } - if (main->parameters.remaining.used || main->process_pipe) { + if (main->parameters.remaining.used || (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[byte_dump_parameter_width_e].result == f_console_result_found_e) { flockfile(main->error.to.stream); @@ -389,7 +360,7 @@ extern "C" { data.last = (data.last - data.first) + 1; } - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -498,7 +469,7 @@ extern "C" { status = byte_dump_file(&data, data.argv[main->parameters.remaining.array[counter]], file); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/byte_dump/c/byte_dump.h b/level_3/byte_dump/c/byte_dump.h index 64403f96f..f25b91a73 100644 --- a/level_3/byte_dump/c/byte_dump.h +++ b/level_3/byte_dump/c/byte_dump.h @@ -95,7 +95,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_byte_dump_main_ - extern f_status_t byte_dump_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t byte_dump_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_byte_dump_main_ #ifdef __cplusplus diff --git a/level_3/byte_dump/c/common.h b/level_3/byte_dump/c/common.h index ba8abf70e..17e88a91c 100644 --- a/level_3/byte_dump/c/common.h +++ b/level_3/byte_dump/c/common.h @@ -283,6 +283,8 @@ extern "C" { byte_dump_parameter_verbosity_verbose_e, byte_dump_parameter_verbosity_debug_e, byte_dump_parameter_version_e, + byte_dump_parameter_line_first_no_e, + byte_dump_parameter_line_last_no_e, byte_dump_parameter_binary_e, byte_dump_parameter_decimal_e, @@ -307,35 +309,38 @@ extern "C" { #define byte_dump_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_binary_s.string, byte_dump_long_binary_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_decimal_s.string, byte_dump_long_decimal_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_duodecimal_s.string, byte_dump_long_duodecimal_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_hexidecimal_s.string, byte_dump_long_hexidecimal_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_octal_s.string, byte_dump_long_octal_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_unicode_s.string, byte_dump_long_unicode_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_first_s.string, byte_dump_long_first_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_last_s.string, byte_dump_long_last_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_narrow_s.string, byte_dump_long_narrow_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_placeholder_s.string, byte_dump_long_placeholder_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_text_s.string, byte_dump_long_text_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_wide_s.string, byte_dump_long_wide_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(byte_dump_short_width_s.string, byte_dump_long_width_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, byte_dump_long_normal_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, byte_dump_long_simple_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, byte_dump_long_classic_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(byte_dump_short_binary_s.string, byte_dump_long_binary_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_decimal_s.string, byte_dump_long_decimal_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_duodecimal_s.string, byte_dump_long_duodecimal_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_hexidecimal_s.string, byte_dump_long_hexidecimal_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_octal_s.string, byte_dump_long_octal_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_unicode_s.string, byte_dump_long_unicode_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_first_s.string, byte_dump_long_first_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_last_s.string, byte_dump_long_last_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_narrow_s.string, byte_dump_long_narrow_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_placeholder_s.string, byte_dump_long_placeholder_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_text_s.string, byte_dump_long_text_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_wide_s.string, byte_dump_long_wide_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(byte_dump_short_width_s.string, byte_dump_long_width_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, byte_dump_long_normal_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, byte_dump_long_simple_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, byte_dump_long_classic_s.string, 0, 0, f_console_type_normal_e), \ } - #define byte_dump_total_parameters_d 26 + #define byte_dump_total_parameters_d 28 #endif // _di_byte_dump_parameters_ #ifdef __cplusplus diff --git a/level_3/byte_dump/c/main.c b/level_3/byte_dump/c/main.c index 586e425e8..f05e1b093 100644 --- a/level_3/byte_dump/c/main.c +++ b/level_3/byte_dump/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = byte_dump_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = byte_dump_main(&data, &arguments); + const f_status_t status = byte_dump_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/byte_dump/data/build/settings b/level_3/byte_dump/data/build/settings index 23c99f9e3..348b33894 100644 --- a/level_3/byte_dump/data/build/settings +++ b/level_3/byte_dump/data/build/settings @@ -3,7 +3,7 @@ build_name byte_dump version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/control/c/common.h b/level_3/control/c/common.h index ce5386d10..1e77a7d65 100644 --- a/level_3/control/c/common.h +++ b/level_3/control/c/common.h @@ -104,6 +104,8 @@ extern "C" { control_parameter_verbosity_verbose_e, control_parameter_verbosity_debug_e, control_parameter_version_e, + control_parameter_line_first_no_e, + control_parameter_line_last_no_e, control_parameter_name_e, control_parameter_return_e, @@ -113,23 +115,26 @@ extern "C" { #define control_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(control_short_name_s.string, control_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(control_short_return_s.string, control_long_return_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(control_short_settings_s.string, control_long_settings_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(control_short_socket_s.string, control_long_socket_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(control_short_name_s.string, control_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(control_short_return_s.string, control_long_return_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(control_short_settings_s.string, control_long_settings_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(control_short_socket_s.string, control_long_socket_s.string, 0, 1, f_console_type_normal_e), \ } - #define control_total_parameters_d 14 + #define control_total_parameters_d 16 #endif // _di_control_parameters_ /** diff --git a/level_3/control/c/control.c b/level_3/control/c/control.c index 4958d1c36..91c9c2102 100644 --- a/level_3/control/c/control.c +++ b/level_3/control/c/control.c @@ -12,17 +12,13 @@ extern "C" { flockfile(main->output.to.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(main->output.to, main->context, control_program_name_long_s, control_program_version_s); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not main->output.to in color."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal main->output.to."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(main->output.to, context); f_print_dynamic_raw(f_string_eol_s, main->output.to.stream); @@ -33,7 +29,7 @@ extern "C" { fll_program_print_help_usage(main->output.to, main->context, control_program_name_s, control_action_s); - fl_print_format(" When the %[%r%r%] parameter represents a directory path then the file name is generated from either the", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, control_long_socket_s, main->context.set.notable); + fl_print_format("%r When the %[%r%r%] parameter represents a directory path then the file name is generated from either the", main->output.to.stream, f_string_eol_s, main->context.set.notable, f_console_symbol_long_enable_s, control_long_socket_s, main->context.set.notable); fl_print_format(" %[%r%r%] parameter or from the control settings file.%r%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, control_long_name_s, main->context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" A rule action allows for either the full rule path, such as '%[boot/root%]'", main->output.to.stream, main->context.set.notable, main->context.set.notable); @@ -42,9 +38,13 @@ extern "C" { fl_print_format(" The %[%r%r%] parameter is intended to be used for scripting and is of the form \"response [type] [action] [status]\".%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, control_long_return_s, main->context.set.notable, f_string_eol_s); fl_print_format(" Be sure to use the %[%r%r%] parameter to suppress output when using this in scripting.%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_disable_s, f_console_standard_long_quiet_s, main->context.set.notable, f_string_eol_s); - fl_print_format(" No response is returned on program errors, especially those errors that prevent communicating to the controller.%r%r", main->output.to.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" No response is returned on program errors, especially those errors that prevent communicating to the controller.%r", main->output.to.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + //} - fflush(main->output.to.stream); + f_file_stream_flush(main->output.to.stream); funlockfile(main->output.to.stream); return F_none; @@ -52,84 +52,50 @@ extern "C" { #endif // _di_control_print_help_ #ifndef _di_control_main_ - f_status_t control_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t control_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { control_parameter_no_color_e, control_parameter_light_e, control_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); - - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { control_parameter_no_color_e, control_parameter_light_e, control_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - fll_program_parameter_process_empty(&main->context, sets); - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - if (F_status_is_error(status)) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); - fll_print_dynamic_raw(f_string_eol_s, main->error.to.stream); + return; } - - return F_status_set_error(status); } - } - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { control_parameter_verbosity_quiet_e, control_parameter_verbosity_error_e, control_parameter_verbosity_normal_e, control_parameter_verbosity_verbose_e, control_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { control_parameter_verbosity_quiet_e, control_parameter_verbosity_error_e, control_parameter_verbosity_verbose_e, control_parameter_verbosity_debug_e, control_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == control_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == control_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == control_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == control_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == control_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -182,7 +148,7 @@ extern "C" { } if (F_status_is_error_not(status)) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { control_print_error_pipe_supported_not(main); status = F_status_set_error(F_supported_not); diff --git a/level_3/control/c/control.h b/level_3/control/c/control.h index 697122cf2..a1f387d89 100644 --- a/level_3/control/c/control.h +++ b/level_3/control/c/control.h @@ -96,7 +96,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_control_main_ - extern f_status_t control_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t control_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_control_main_ #ifdef __cplusplus diff --git a/level_3/control/c/main.c b/level_3/control/c/main.c index fa54ef2c6..4c909ac2f 100644 --- a/level_3/control/c/main.c +++ b/level_3/control/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = control_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = control_main(&data, &arguments); + const f_status_t status = control_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/control/c/private-control.c b/level_3/control/c/private-control.c index 87ceae8b9..3b6d494b2 100644 --- a/level_3/control/c/private-control.c +++ b/level_3/control/c/private-control.c @@ -642,7 +642,7 @@ extern "C" { status = f_file_stream_read(file, &data->cache.large); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/control/data/build/settings b/level_3/control/data/build/settings index 764b86520..39ea2d1bd 100644 --- a/level_3/control/data/build/settings +++ b/level_3/control/data/build/settings @@ -3,7 +3,7 @@ build_name control version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/controller/c/common.h b/level_3/controller/c/common.h index d4d64e610..be9d88c44 100644 --- a/level_3/controller/c/common.h +++ b/level_3/controller/c/common.h @@ -126,6 +126,8 @@ extern "C" { controller_parameter_verbosity_verbose_e, controller_parameter_verbosity_debug_e, controller_parameter_version_e, + controller_parameter_line_first_no_e, + controller_parameter_line_last_no_e, controller_parameter_cgroup_e, controller_parameter_daemon_e, @@ -141,29 +143,32 @@ extern "C" { #define controller_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(controller_short_cgroup_s.string, controller_long_cgroup_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_daemon_s.string, controller_long_daemon_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_init_s.string, controller_long_init_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_interruptible_s.string, controller_long_interruptible_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_pid_s.string, controller_long_pid_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_settings_s.string, controller_long_settings_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_simulate_s.string, controller_long_simulate_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_socket_s.string, controller_long_socket_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_uninterruptible_s.string, controller_long_uninterruptible_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(controller_short_validate_s.string, controller_long_validate_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(controller_short_cgroup_s.string, controller_long_cgroup_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_daemon_s.string, controller_long_daemon_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_init_s.string, controller_long_init_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_interruptible_s.string, controller_long_interruptible_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_pid_s.string, controller_long_pid_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_settings_s.string, controller_long_settings_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_simulate_s.string, controller_long_simulate_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_socket_s.string, controller_long_socket_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_uninterruptible_s.string, controller_long_uninterruptible_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(controller_short_validate_s.string, controller_long_validate_s.string, 0, 0, f_console_type_normal_e), \ } - #define controller_total_parameters_d 20 + #define controller_total_parameters_d 22 #endif // _di_controller_parameters_ /** @@ -187,7 +192,6 @@ extern "C" { * output: The output file for general printing. * parameters: The state of pre-defined parameters passed to the program. * pid: The PID of the program. - * process_pipe: Designate whether or not to process the input pipe. * program_name: The name of the program. * program_name_long: The long name of the program. * signal: The process signal management structure. @@ -198,7 +202,6 @@ extern "C" { typedef struct { f_console_parameters_t parameters; - bool process_pipe; bool as_init; fl_print_t output; @@ -235,7 +238,6 @@ extern "C" { { \ f_console_parameters_t_initialize, \ F_false, \ - F_false, \ fl_print_t_initialize, \ macro_fl_print_t_initialize_error(), \ macro_fl_print_t_initialize_warning(), \ diff --git a/level_3/controller/c/controller.c b/level_3/controller/c/controller.c index 500f7ddaa..8c3daf3fd 100644 --- a/level_3/controller/c/controller.c +++ b/level_3/controller/c/controller.c @@ -17,17 +17,13 @@ extern "C" { controller_lock_print(main->output.to, 0); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(main->output.to, main->context, *main->program_name_long, controller_program_version_s); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not main->output.to in color."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity beyond normal main->output.to."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal main->output.to."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal main->output.to."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, increasing verbosity beyond normal main->output.to."); - fll_program_print_help_option(main->output.to, main->context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(main->output.to, context); f_print_dynamic_raw(f_string_eol_s, main->output.to.stream); @@ -44,14 +40,18 @@ extern "C" { fll_program_print_help_usage(main->output.to, main->context, *main->program_name, controller_entry_s); - fl_print_format(" When both the %[%r%r%] parameter and the", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, controller_long_simulate_s, main->context.set.notable); + fl_print_format("%r When both the %[%r%r%] parameter and the", main->output.to.stream, f_string_eol_s, main->context.set.notable, f_console_symbol_long_enable_s, controller_long_simulate_s, main->context.set.notable); fl_print_format(" %[%r%r%] parameter are specified, then additional information on each would be executed rule is printed but no simulation is performed.%r%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, controller_long_validate_s, main->context.set.notable, f_string_eol_s, f_string_eol_s); const f_string_static_t interruptable = main->as_init ? controller_long_uninterruptible_s : controller_long_interruptible_s; fl_print_format(" The default interrupt behavior is to operate as if the %[%r%r%] parameter is passed.%r%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, interruptable, main->context.set.notable, f_string_eol_s, f_string_eol_s); - fl_print_format(" Specify an empty string for the %[%r%r%] parameter to disable pid file creation for this program.%r%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, controller_long_pid_s, main->context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" Specify an empty string for the %[%r%r%] parameter to disable pid file creation for this program.%r", main->output.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, controller_long_pid_s, main->context.set.notable, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + //} controller_unlock_print_flush(main->output.to, 0); @@ -60,84 +60,50 @@ extern "C" { #endif // _di_controller_print_help_ #ifndef _di_controller_main_ - f_status_t controller_main(controller_main_t * const main, const f_console_arguments_t *arguments) { + f_status_t controller_main(controller_main_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { controller_parameter_no_color_e, controller_parameter_light_e, controller_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { controller_parameter_no_color_e, controller_parameter_light_e, controller_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; - - fll_program_parameter_process_empty(&main->context, sets); - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - if (F_status_is_error(status)) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); - fll_print_dynamic_raw(f_string_eol_s, main->error.to.stream); + return; } - - return F_status_set_error(status); } - } - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { controller_parameter_verbosity_quiet_e, controller_parameter_verbosity_error_e, controller_parameter_verbosity_normal_e, controller_parameter_verbosity_verbose_e, controller_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { controller_parameter_verbosity_quiet_e, controller_parameter_verbosity_error_e, controller_parameter_verbosity_verbose_e, controller_parameter_verbosity_debug_e, controller_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == controller_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == controller_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == controller_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == controller_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == controller_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } diff --git a/level_3/controller/c/controller.h b/level_3/controller/c/controller.h index a0c020563..3e3e0322a 100644 --- a/level_3/controller/c/controller.h +++ b/level_3/controller/c/controller.h @@ -125,7 +125,7 @@ extern "C" { * @see controller_main_delete() */ #ifndef _di_controller_main_ - extern f_status_t controller_main(controller_main_t * const main, const f_console_arguments_t *arguments); + extern f_status_t controller_main(controller_main_t * const main, const f_console_arguments_t arguments); #endif // _di_controller_main_ #ifdef __cplusplus diff --git a/level_3/controller/c/controller/private-controller.c b/level_3/controller/c/controller/private-controller.c index e739ddd10..1570655a1 100644 --- a/level_3/controller/c/controller/private-controller.c +++ b/level_3/controller/c/controller/private-controller.c @@ -94,7 +94,7 @@ extern "C" { if (F_status_is_error(status)) { if (!required && F_status_set_fine(status) == F_file_found_not) { - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); return F_file_found_not; @@ -114,7 +114,7 @@ extern "C" { } } - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error_not(status)) { @@ -177,7 +177,7 @@ extern "C" { fll_print_format("%i%r", file.stream, pid, f_string_eol_s); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) return status; @@ -205,7 +205,7 @@ extern "C" { status = f_file_stream_read(pid_file, &pid_buffer); if (F_status_is_error_not(status)) { - status = f_file_stream_flush(&pid_file); + status = f_file_stream_flush(pid_file); } if (F_status_is_error_not(status)) { @@ -262,7 +262,7 @@ extern "C" { status = f_file_stream_read(pid_file, &pid_buffer); if (F_status_is_error_not(status)) { - status = f_file_stream_flush(&pid_file); + status = f_file_stream_flush(pid_file); } if (F_status_is_error_not(status)) { diff --git a/level_3/controller/c/entry/private-entry_print.c b/level_3/controller/c/entry/private-entry_print.c index 35bbee9db..c545a0496 100644 --- a/level_3/controller/c/entry/private-entry_print.c +++ b/level_3/controller/c/entry/private-entry_print.c @@ -133,9 +133,9 @@ extern "C" { controller_lock_print(print.to, thread); - fl_print_format("%r%[%Q%r setting%S '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, is_entry ? controller_Entry_s : controller_Exit_s, before, print.context); - fl_print_format("%[%/Q%]", print.to.stream, print.notable, cache->buffer_file, range, print.notable); - fl_print_format("%['%S.%]%r", print.to.stream, print.context, after, print.context, f_string_eol_s); + fl_print_format("%r%[%Q%r setting%S '%]", print.to, f_string_eol_s, print.context, print.prefix, is_entry ? controller_Entry_s : controller_Exit_s, before, print.context); + fl_print_format("%[%/Q%]", print.to, print.notable, cache->buffer_file, range, print.notable); + fl_print_format("%['%S.%]%r", print.to, print.context, after, print.context, f_string_eol_s); controller_entry_print_error_cache(is_entry, print, cache->action); diff --git a/level_3/controller/c/lock/private-lock_print.c b/level_3/controller/c/lock/private-lock_print.c index f3e0bcb71..5613eece6 100644 --- a/level_3/controller/c/lock/private-lock_print.c +++ b/level_3/controller/c/lock/private-lock_print.c @@ -15,28 +15,28 @@ extern "C" { if (print.verbosity != f_console_verbosity_quiet_e) { controller_lock_print(print.to, thread); - fl_print_format("%r%[%QThe pid file '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%['Critical failure while attempting to establish '%]", print.to.stream, print.context, print.context); - fl_print_format("%[%r lock%]", print.to.stream, print.notable, read ? f_file_operation_read_s : f_file_operation_write_s, print.notable); + fl_print_format("%r%[%QThe pid file '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%['Critical failure while attempting to establish '%]", print.to, print.context, print.context); + fl_print_format("%[%r lock%]", print.to, print.notable, read ? f_file_operation_read_s : f_file_operation_write_s, print.notable); if (status != F_failure) { - fl_print_format(" %['due to%] ", print.to.stream, print.context, print.context); + fl_print_format(" %['due to%] ", print.to, print.context, print.context); if (status == F_parameter) { - fl_print_format("%[Invalid Parameter%]", print.to.stream, print.notable, print.notable); + fl_print_format("%[Invalid Parameter%]", print.to, print.notable, print.notable); } else if (status == F_deadlock) { - fl_print_format("%[Deadlock%]", print.to.stream, print.notable, print.notable); + fl_print_format("%[Deadlock%]", print.to, print.notable, print.notable); } else if (status == F_resource_not) { - fl_print_format("%[Too Many Locks%]", print.to.stream, print.notable, print.notable); + fl_print_format("%[Too Many Locks%]", print.to, print.notable, print.notable); } else { - fl_print_format("%[Unknown Error%]", print.to.stream, print.notable, print.notable); + fl_print_format("%[Unknown Error%]", print.to, print.notable, print.notable); } } - fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%['.%]%r", print.to, print.context, print.context, f_string_eol_s); controller_unlock_print_flush(print.to, thread); } @@ -57,7 +57,7 @@ extern "C" { #ifndef _di_controller_unlock_print_flush_ void controller_unlock_print_flush(const f_file_t to, controller_thread_t * const thread) { - fflush(to.stream); + f_file_stream_flush(to.stream); funlockfile(to.stream); if (thread) { diff --git a/level_3/controller/c/main.c b/level_3/controller/c/main.c index 2de5fd981..39d9cda8d 100644 --- a/level_3/controller/c/main.c +++ b/level_3/controller/c/main.c @@ -11,12 +11,12 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = controller_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } data.pid = getpid(); - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); f_file_umask_get(&data.umask); @@ -41,11 +41,11 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.as_init = F_false; #endif // _controller_as_init_ - const f_status_t status = controller_main(&data, &arguments); + const f_status_t status = controller_main(&data, arguments); controller_main_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); // When the child process exits, it must return the code to the parent so the parent knows how to handle the exit. if (status == F_child) { diff --git a/level_3/controller/c/rule/private-rule_print.c b/level_3/controller/c/rule/private-rule_print.c index 0f6a73019..8602e92b3 100644 --- a/level_3/controller/c/rule/private-rule_print.c +++ b/level_3/controller/c/rule/private-rule_print.c @@ -34,29 +34,29 @@ extern "C" { if (print.verbosity == f_console_verbosity_quiet_e) return; - fl_print_format("%r%[%QWhile processing ", print.to.stream, f_string_eol_s, print.context, print.prefix); + fl_print_format("%r%[%QWhile processing ", print.to, f_string_eol_s, print.context, print.prefix); if (cache.name_action.used) { - fl_print_format("%r '%]", print.to.stream, item ? controller_action_s : controller_value_s, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, cache.name_action, print.notable); - fl_print_format("%[' on line%] ", print.to.stream, print.context, print.context); - fl_print_format("%[%un%]", print.to.stream, print.notable, cache.line_action, print.notable); - fl_print_format("%[ for ", print.to.stream, print.context); + fl_print_format("%r '%]", print.to, item ? controller_action_s : controller_value_s, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, cache.name_action, print.notable); + fl_print_format("%[' on line%] ", print.to, print.context, print.context); + fl_print_format("%[%un%]", print.to, print.notable, cache.line_action, print.notable); + fl_print_format("%[ for ", print.to, print.context); } if (cache.name_item.used) { - fl_print_format("rule %r '%]", print.to.stream, item ? controller_item_s : controller_settings_s, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, cache.name_item, print.notable); - fl_print_format("%[' on line%] ", print.to.stream, print.context, print.context); - fl_print_format("%[%un%]", print.to.stream, print.notable, cache.line_item, print.notable); - fl_print_format("%[ for ", print.to.stream, print.context); + fl_print_format("rule %r '%]", print.to, item ? controller_item_s : controller_settings_s, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, cache.name_item, print.notable); + fl_print_format("%[' on line%] ", print.to, print.context, print.context); + fl_print_format("%[%un%]", print.to, print.notable, cache.line_item, print.notable); + fl_print_format("%[ for ", print.to, print.context); } if (cache.name_file.used) { - fl_print_format("rule file '%]%[%Q%]%['", print.to.stream, print.context, print.notable, cache.name_file, print.notable, print.context); + fl_print_format("rule file '%]%[%Q%]%['", print.to, print.context, print.notable, cache.name_file, print.notable, print.context); } - fl_print_format(".%]%r", print.to.stream, print.context, f_string_eol_s); + fl_print_format(".%]%r", print.to, print.context, f_string_eol_s); } #endif // _di_controller_rule_print_error_cache_ @@ -333,9 +333,9 @@ extern "C" { if (print.verbosity == f_console_verbosity_quiet_e) return; - fl_print_format("%r%[%QThe rule '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, alias, print.notable); - fl_print_format("%[' is not designating a pid file.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe rule '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, alias, print.notable); + fl_print_format("%[' is not designating a pid file.%]%r", print.to, print.context, print.context, f_string_eol_s); } #endif // _di_controller_rule_action_print_error_missing_pid_ @@ -344,9 +344,9 @@ extern "C" { if (print.verbosity == f_console_verbosity_quiet_e) return; - fl_print_format("%r%[%QThe %r rule '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, need_want_wish, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, value, print.notable); - fl_print_format("%[' %S.%]%r", print.to.stream, print.context, why, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe %r rule '%]", print.to, f_string_eol_s, print.context, print.prefix, need_want_wish, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, value, print.notable); + fl_print_format("%[' %S.%]%r", print.to, print.context, why, print.context, f_string_eol_s); } #endif // _di_controller_rule_item_print_error_need_want_wish_ @@ -355,9 +355,9 @@ extern "C" { if (print.verbosity == f_console_verbosity_quiet_e) return; - fl_print_format("%r%[%QThe rule '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, alias, print.notable); - fl_print_format("%[' is no longer loaded.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe rule '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, alias, print.notable); + fl_print_format("%[' is no longer loaded.%]%r", print.to, print.context, print.context, f_string_eol_s); } #endif // _di_controller_rule_item_print_error_rule_not_loaded_ @@ -376,7 +376,7 @@ extern "C" { controller_lock_print(print.to, thread); - fl_print_format("%r%[%QRule setting %S.%]%r", print.to.stream, f_string_eol_s, print.context, print.prefix, message, print.context, f_string_eol_s); + fl_print_format("%r%[%QRule setting %S.%]%r", print.to, f_string_eol_s, print.context, print.prefix, message, print.context, f_string_eol_s); controller_rule_print_error_cache(print, cache->action, F_false); @@ -399,9 +399,9 @@ extern "C" { controller_lock_print(print.to, thread); - fl_print_format("%r%[%QRule setting%S '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, before, print.context); - fl_print_format("%[%/Q%]", print.to.stream, print.notable, cache->buffer_item, range, print.notable); - fl_print_format("%['%S.%]%r", print.to.stream, print.context, after, print.context, f_string_eol_s); + fl_print_format("%r%[%QRule setting%S '%]", print.to, f_string_eol_s, print.context, print.prefix, before, print.context); + fl_print_format("%[%/Q%]", print.to, print.notable, cache->buffer_item, range, print.notable); + fl_print_format("%['%S.%]%r", print.to, print.context, after, print.context, f_string_eol_s); controller_rule_print_error_cache(print, cache->action, F_false); diff --git a/level_3/controller/data/build/settings b/level_3/controller/data/build/settings index 13108f7d1..299a0b2f6 100644 --- a/level_3/controller/data/build/settings +++ b/level_3/controller/data/build/settings @@ -3,7 +3,7 @@ build_name controller version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fake/c/common.h b/level_3/fake/c/common.h index 67cb92966..3dc0044c2 100644 --- a/level_3/fake/c/common.h +++ b/level_3/fake/c/common.h @@ -391,6 +391,8 @@ extern "C" { fake_parameter_verbosity_verbose_e, fake_parameter_verbosity_debug_e, fake_parameter_version_e, + fake_parameter_line_first_no_e, + fake_parameter_line_last_no_e, fake_parameter_define_e, fake_parameter_fakefile_e, @@ -418,38 +420,41 @@ extern "C" { #define fake_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fake_short_define_s.string, fake_long_define_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_fakefile_s.string, fake_long_fakefile_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_mode_s.string, fake_long_mode_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_process_s.string, fake_long_process_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_settings_s.string, fake_long_settings_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_path_build_s.string, fake_long_path_build_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_path_data_s.string, fake_long_path_data_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_path_sources_s.string, fake_long_path_sources_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fake_short_path_work_s.string, fake_long_path_work_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, fake_long_documents_disabled_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, fake_long_documents_enabled_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, fake_long_shared_disabled_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, fake_long_shared_enabled_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, fake_long_static_disabled_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, fake_long_static_enabled_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(0, 0, fake_other_operation_build_s.string, 0, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, fake_other_operation_clean_s.string, 0, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, fake_other_operation_make_s.string, 0, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, fake_other_operation_skeleton_s.string, 0, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fake_short_define_s.string, fake_long_define_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_fakefile_s.string, fake_long_fakefile_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_mode_s.string, fake_long_mode_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_process_s.string, fake_long_process_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_settings_s.string, fake_long_settings_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_path_build_s.string, fake_long_path_build_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_path_data_s.string, fake_long_path_data_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_path_sources_s.string, fake_long_path_sources_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fake_short_path_work_s.string, fake_long_path_work_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, fake_long_documents_disabled_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, fake_long_documents_enabled_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, fake_long_shared_disabled_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, fake_long_shared_enabled_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, fake_long_static_disabled_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, fake_long_static_enabled_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(0, 0, fake_other_operation_build_s.string, 0, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, fake_other_operation_clean_s.string, 0, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, fake_other_operation_make_s.string, 0, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, fake_other_operation_skeleton_s.string, 0, f_console_type_other_e), \ } - #define fake_total_parameters_d 29 + #define fake_total_parameters_d 31 #endif // _di_fake_parameters_ #ifdef __cplusplus diff --git a/level_3/fake/c/fake.c b/level_3/fake/c/fake.c index b3f7a9a4d..273d14652 100644 --- a/level_3/fake/c/fake.c +++ b/level_3/fake/c/fake.c @@ -18,18 +18,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fake_program_name_long_s, fake_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -64,7 +59,7 @@ extern "C" { fll_program_print_help_usage(file, context, fake_program_name_s, fake_program_help_parameters_s); - fl_print_format(" When performing the %[%r%] operation, the", file.stream, context.set.notable, fake_other_operation_build_s, context.set.notable); + fl_print_format("%r When performing the %[%r%] operation, the", file.stream, f_string_eol_s, context.set.notable, fake_other_operation_build_s, context.set.notable); fl_print_format(" %[%r%r%] parameter specifies a name (limited to alpha-numeric, underscore, and dash) to be used in addition to the global.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fake_long_mode_s, context.set.notable, f_string_eol_s); fl_print_format(" For example, when a %[%r%]", file.stream, context.set.notable, fake_make_parameter_variable_mode_s, context.set.notable); @@ -80,8 +75,13 @@ extern "C" { fl_print_format(" '%[./my_fakefile%]' is used if found, but if it is not found then no other paths are attempted.%r%r", file.stream, context.set.notable, context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" When piping data to this program, the piped data is treated as if it were prepended to the %[%r%]", file.stream, context.set.notable, fake_make_parameter_variable_fakefile_s, context.set.notable); - fl_print_format("or the %[%r%], depending on the operation.%r%r", file.stream, context.set.notable, fake_make_parameter_variable_settings_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format("or the %[%r%], depending on the operation.%r", file.stream, context.set.notable, fake_make_parameter_variable_settings_s, context.set.notable, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -89,82 +89,50 @@ extern "C" { #endif // _di_fake_print_help_ #ifndef _di_fake_main_ - f_status_t fake_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fake_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - // Load all parameters and identify priority of color parameters. - { - f_console_parameter_id_t ids[3] = { fake_parameter_no_color_e, fake_parameter_light_e, fake_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fake_parameter_no_color_e, fake_parameter_light_e, fake_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); - - return status; - } - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fake_parameter_verbosity_quiet_e, fake_parameter_verbosity_error_e, fake_parameter_verbosity_normal_e, fake_parameter_verbosity_verbose_e, fake_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fake_parameter_verbosity_quiet_e, fake_parameter_verbosity_error_e, fake_parameter_verbosity_verbose_e, fake_parameter_verbosity_debug_e, fake_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fake_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fake_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fake_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fake_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fake_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -277,7 +245,7 @@ extern "C" { else { operations[0] = fake_operation_make_e; - if (!main->process_pipe && main->parameters.remaining.used) { + if (!(main->pipe & fll_program_data_pipe_input_e) && main->parameters.remaining.used) { status = F_status_set_error(F_parameter); if (main->error.verbosity != f_console_verbosity_quiet_e) { @@ -322,7 +290,7 @@ extern "C" { { uint8_t i = 0; - if (main->process_pipe && !(data.flag & fake_data_flag_has_operation_e)) { + if ((main->pipe & fll_program_data_pipe_input_e) && !(data.flag & fake_data_flag_has_operation_e)) { data.file_data_build_fakefile.used = 0; status = f_string_dynamic_append(f_string_ascii_minus_s, &data.file_data_build_fakefile); @@ -354,7 +322,7 @@ extern "C" { status = fake_validate_parameter_paths(&data); - if (F_status_is_error_not(status) && !main->process_pipe) { + if (F_status_is_error_not(status) && !(main->pipe & fll_program_data_pipe_input_e)) { f_string_static_t *path = 0; if (operations[i] == fake_operation_build_e) { @@ -406,7 +374,7 @@ extern "C" { } if (F_status_is_error_not(status)) { - status = fake_build_operate(&data, 0, main->process_pipe); + status = fake_build_operate(&data, 0, main->pipe & fll_program_data_pipe_input_e); } } else if (data.operation == fake_operation_clean_e) { diff --git a/level_3/fake/c/fake.h b/level_3/fake/c/fake.h index 63e22860d..7c7a32640 100644 --- a/level_3/fake/c/fake.h +++ b/level_3/fake/c/fake.h @@ -136,7 +136,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fake_main_ - extern f_status_t fake_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fake_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fake_main_ /** diff --git a/level_3/fake/c/main.c b/level_3/fake/c/main.c index 1b4ad4fb5..75db8a37c 100644 --- a/level_3/fake/c/main.c +++ b/level_3/fake/c/main.c @@ -24,18 +24,18 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fake_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); f_file_umask_get(&data.umask); - const f_status_t status = fake_main(&data, &arguments); + const f_status_t status = fake_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (status == F_child) { exit(data.child); diff --git a/level_3/fake/c/private-build.c b/level_3/fake/c/private-build.c index 9204fd67a..df4bc55b1 100644 --- a/level_3/fake/c/private-build.c +++ b/level_3/fake/c/private-build.c @@ -560,7 +560,7 @@ extern "C" { *status = fll_execute_arguments_add(fake_other_operation_build_s, &arguments); // Ensure console color mode is passed to the scripts so that they can also react to color mode. - if (F_status_is_error_not(*status) && data->main->context.mode != F_color_mode_none_d) { + if (F_status_is_error_not(*status) && data->main->context.mode != f_color_mode_none_e) { f_string_static_t argument = f_string_static_t_initialize; argument.used = f_console_symbol_short_disable_s.used + f_console_standard_short_dark_s.used; @@ -570,13 +570,13 @@ extern "C" { memcpy(argument_string, f_console_symbol_short_disable_s.string, sizeof(f_char_t) * f_console_symbol_short_disable_s.used); - if (data->main->context.mode == F_color_mode_dark_d) { + if (data->main->context.mode == f_color_mode_dark_e) { memcpy(argument_string + f_console_symbol_short_disable_s.used, f_console_standard_short_dark_s.string, sizeof(f_char_t) * f_console_standard_short_dark_s.used); } - else if (data->main->context.mode == F_color_mode_light_d) { + else if (data->main->context.mode == f_color_mode_light_e) { memcpy(argument_string + f_console_symbol_short_disable_s.used, f_console_standard_short_light_s.string, sizeof(f_char_t) * f_console_standard_short_light_s.used); } - else if (data->main->context.mode == F_color_mode_no_color_d) { + else if (data->main->context.mode == f_color_mode_color_not_e) { memcpy(argument_string + f_console_symbol_short_disable_s.used, f_console_standard_short_no_color_s.string, sizeof(f_char_t) * f_console_standard_short_no_color_s.used); } diff --git a/level_3/fake/c/private-fake.c b/level_3/fake/c/private-fake.c index e2f10c13a..a847f01bd 100644 --- a/level_3/fake/c/private-fake.c +++ b/level_3/fake/c/private-fake.c @@ -131,7 +131,7 @@ extern "C" { name_function = "f_file_read"; status = f_file_read(file, buffer); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } } @@ -569,7 +569,7 @@ extern "C" { uint8_t parameters_required[] = { F_false, - data->main->process_pipe ? F_false : F_true, + (data->main->pipe & fll_program_data_pipe_input_e) ? F_false : F_true, F_false, }; @@ -651,19 +651,19 @@ extern "C" { #ifndef _di_fake_verbose_print_clone_ void fake_verbose_print_clone(const f_file_t output, const f_string_static_t source, const f_string_static_t destination) { - fll_print_format("Cloned '%Q' to '%Q'.%r", output.stream, source, destination, f_string_eol_s); + fll_print_format("Cloned '%Q' to '%Q'.%r", output, source, destination, f_string_eol_s); } #endif // _di_fake_verbose_print_clone_ #ifndef _di_fake_verbose_print_copy_ void fake_verbose_print_copy(const f_file_t output, const f_string_static_t source, const f_string_static_t destination) { - fll_print_format("Copied '%Q' to '%Q'.%r", output.stream, source, destination, f_string_eol_s); + fll_print_format("Copied '%Q' to '%Q'.%r", output, source, destination, f_string_eol_s); } #endif // _di_fake_verbose_print_copy_ #ifndef _di_fake_verbose_print_move_ void fake_verbose_print_move(const f_file_t output, const f_string_static_t source, const f_string_static_t destination) { - fll_print_format("Moved '%Q' to '%Q'.%r", output.stream, source, destination, f_string_eol_s); + fll_print_format("Moved '%Q' to '%Q'.%r", output, source, destination, f_string_eol_s); } #endif // _di_fake_verbose_print_move_ diff --git a/level_3/fake/c/private-make-load_parameters.c b/level_3/fake/c/private-make-load_parameters.c index 16d3e8d92..6ebcae2e0 100644 --- a/level_3/fake/c/private-make-load_parameters.c +++ b/level_3/fake/c/private-make-load_parameters.c @@ -11,7 +11,7 @@ extern "C" { if (F_status_is_error(*status)) return; - if (data_make->main->context.mode != F_color_mode_none_d) { + if (data_make->main->context.mode != f_color_mode_none_e) { *status = f_string_dynamics_increase_by(fake_default_allocation_small_d, &data_make->parameter.color); if (F_status_is_error_not(*status)) { @@ -24,7 +24,7 @@ extern "C" { return; } - if (data_make->main->context.mode == F_color_mode_no_color_d) { + if (data_make->main->context.mode == f_color_mode_color_not_e) { if (data_make->main->parameters.array[fake_parameter_no_color_e].type == f_console_type_normal_e) { *status = f_string_dynamic_append(f_console_symbol_short_enable_s, &data_make->parameter.color.array[data_make->parameter.color.used]); } @@ -36,7 +36,7 @@ extern "C" { *status = f_string_dynamic_append(f_console_standard_short_no_color_s, &data_make->parameter.color.array[data_make->parameter.color.used]); } } - else if (data_make->main->context.mode == F_color_mode_dark_d) { + else if (data_make->main->context.mode == f_color_mode_dark_e) { if (data_make->main->parameters.array[fake_parameter_dark_e].type == f_console_type_normal_e) { *status = f_string_dynamic_append(f_console_symbol_short_enable_s, &data_make->parameter.color.array[data_make->parameter.color.used]); } diff --git a/level_3/fake/c/private-make-operate.c b/level_3/fake/c/private-make-operate.c index f1ac0c491..d869d4df9 100644 --- a/level_3/fake/c/private-make-operate.c +++ b/level_3/fake/c/private-make-operate.c @@ -86,7 +86,7 @@ extern "C" { fake_make_load_parameters(&data_make, &status); - fake_make_load_fakefile(&data_make, data_make.main->process_pipe, &status); + fake_make_load_fakefile(&data_make, main->pipe & fll_program_data_pipe_input_e, &status); if (F_status_is_error(status)) { fake_make_data_delete(&data_make); @@ -152,7 +152,7 @@ extern "C" { } } - f_file_stream_flush(&data_make.path.top); + f_file_stream_flush(data_make.path.top); f_file_stream_close(&data_make.path.top); f_array_lengths_resize(0, §ion_stack); diff --git a/level_3/fake/c/private-make-operate_process_type.c b/level_3/fake/c/private-make-operate_process_type.c index a2a60d80a..530ac3406 100644 --- a/level_3/fake/c/private-make-operate_process_type.c +++ b/level_3/fake/c/private-make-operate_process_type.c @@ -1964,7 +1964,7 @@ extern "C" { else { status = F_none; - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } } @@ -2026,7 +2026,7 @@ extern "C" { } // for } - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } diff --git a/level_3/fake/c/private-print.c b/level_3/fake/c/private-print.c index 57916b42a..d2d06f309 100644 --- a/level_3/fake/c/private-print.c +++ b/level_3/fake/c/private-print.c @@ -376,13 +376,13 @@ extern "C" { flockfile(print.to.stream); - fl_print_format("%r%[%QThe section operation '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%[%/Q%]", print.to.stream, print.notable, buffer, operation_name, print.notable); - fl_print_format("%[' from section '%]", print.to.stream, print.context, print.context); - fl_print_format("%[%/Q%]", print.to.stream, print.notable, buffer, section_name, print.notable); - fl_print_format("%[' on line%] ", print.to.stream, print.context, print.context); - fl_print_format("%[%un%]", print.to.stream, print.notable, line, print.notable); - fl_print_format(" %[failed.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe section operation '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%/Q%]", print.to, print.notable, buffer, operation_name, print.notable); + fl_print_format("%[' from section '%]", print.to, print.context, print.context); + fl_print_format("%[%/Q%]", print.to, print.notable, buffer, section_name, print.notable); + fl_print_format("%[' on line%] ", print.to, print.context, print.context); + fl_print_format("%[%un%]", print.to, print.notable, line, print.notable); + fl_print_format(" %[failed.%]%r", print.to, print.context, print.context, f_string_eol_s); funlockfile(print.to.stream); } @@ -395,13 +395,13 @@ extern "C" { flockfile(print.to.stream); - fl_print_format("%r%[%QThe argument '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); - fl_print_format("%[' is not not valid and may only be one of either '%]", print.to.stream, print.context, print.context); - fl_print_format("%[%r%]", print.to.stream, print.notable, fake_make_operation_argument_force_s, print.notable); - fl_print_format("%[' or '%]", print.to.stream, print.context, print.context); - fl_print_format("%[%r%]", print.to.stream, print.notable, fake_make_operation_argument_strict_s, print.notable); - fl_print_format("%['.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe argument '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, argument, print.notable); + fl_print_format("%[' is not not valid and may only be one of either '%]", print.to, print.context, print.context); + fl_print_format("%[%r%]", print.to, print.notable, fake_make_operation_argument_force_s, print.notable); + fl_print_format("%[' or '%]", print.to, print.context, print.context); + fl_print_format("%[%r%]", print.to, print.notable, fake_make_operation_argument_strict_s, print.notable); + fl_print_format("%['.%]%r", print.to, print.context, print.context, f_string_eol_s); funlockfile(print.to.stream); @@ -415,9 +415,9 @@ extern "C" { flockfile(print.to.stream); - fl_print_format("%r%[%QThe point file '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); - fl_print_format("%[' already exists.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe point file '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, argument, print.notable); + fl_print_format("%[' already exists.%]%r", print.to, print.context, print.context, f_string_eol_s); funlockfile(print.to.stream); @@ -431,9 +431,9 @@ extern "C" { flockfile(print.to.stream); - fl_print_format("%r%[%QThe target file '%]", print.to.stream, f_string_eol_s, print.context, print.prefix, print.context); - fl_print_format("%[%Q%]", print.to.stream, print.notable, argument, print.notable); - fl_print_format("%[' does not exist.%]%r", print.to.stream, print.context, print.context, f_string_eol_s); + fl_print_format("%r%[%QThe target file '%]", print.to, f_string_eol_s, print.context, print.prefix, print.context); + fl_print_format("%[%Q%]", print.to, print.notable, argument, print.notable); + fl_print_format("%[' does not exist.%]%r", print.to, print.context, print.context, f_string_eol_s); funlockfile(print.to.stream); diff --git a/level_3/fake/c/private-skeleton.c b/level_3/fake/c/private-skeleton.c index edd32a70b..28d68d284 100644 --- a/level_3/fake/c/private-skeleton.c +++ b/level_3/fake/c/private-skeleton.c @@ -274,7 +274,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(data->main->error, F_status_set_fine(status), "f_file_write", F_true, path, fake_common_file_populate_pre_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); return status; @@ -284,7 +284,7 @@ extern "C" { fll_print_format("File '%Q' pre-populated.%r", data->main->output.to.stream, path, f_string_eol_s); } - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } } diff --git a/level_3/fake/data/build/settings b/level_3/fake/data/build/settings index bfd161f18..f776a894b 100644 --- a/level_3/fake/data/build/settings +++ b/level_3/fake/data/build/settings @@ -3,7 +3,7 @@ build_name fake version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/firewall/c/common.h b/level_3/firewall/c/common.h index 77fb5c902..410a4bc30 100644 --- a/level_3/firewall/c/common.h +++ b/level_3/firewall/c/common.h @@ -357,6 +357,8 @@ extern "C" { firewall_parameter_verbosity_verbose_e, firewall_parameter_verbosity_debug_e, firewall_parameter_version_e, + firewall_parameter_line_first_no_e, + firewall_parameter_line_last_no_e, firewall_parameter_command_start_e, firewall_parameter_command_stop_e, @@ -384,24 +386,27 @@ extern "C" { #define firewall_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(0, 0, firewall_command_start_s.string, F_false, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, firewall_command_stop_s.string, F_false, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, firewall_command_restart_s.string, F_false, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, firewall_command_lock_s.string, F_false, f_console_type_other_e), \ - macro_f_console_parameter_t_initialize(0, 0, firewall_command_show_s.string, F_false, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(0, 0, firewall_command_start_s.string, F_false, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, firewall_command_stop_s.string, F_false, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, firewall_command_restart_s.string, F_false, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, firewall_command_lock_s.string, F_false, f_console_type_other_e), \ + macro_f_console_parameter_t_initialize2(0, 0, firewall_command_show_s.string, F_false, f_console_type_other_e), \ } - #define firewall_total_parameters_d 15 + #define firewall_total_parameters_d 17 #endif // _di_firewall_defines_ #ifdef __cplusplus diff --git a/level_3/firewall/c/firewall.c b/level_3/firewall/c/firewall.c index 49fa48cb8..7bb364e37 100644 --- a/level_3/firewall/c/firewall.c +++ b/level_3/firewall/c/firewall.c @@ -17,18 +17,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, firewall_program_name_long_s, firewall_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); fl_print_format("%r%r %[Commands:%] ", file.stream, f_string_eol_s, f_string_eol_s, context.set.important, context.set.important); fl_print_format("%r %[%r%] Turn on the firewall.", file.stream, f_string_eol_s, context.set.standout, firewall_command_start_s, context.set.standout); @@ -39,6 +34,11 @@ extern "C" { fll_program_print_help_usage(file, context, firewall_program_name_s, firewall_program_help_parameters_s); + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -46,74 +46,52 @@ extern "C" { #endif // _di_firewall_print_help_ #ifndef _di_firewall_main_ - f_status_t firewall_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t firewall_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; main->child = 0; + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; + { - f_console_parameter_id_t ids[3] = { firewall_parameter_no_color_e, firewall_parameter_light_e, firewall_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { firewall_parameter_no_color_e, firewall_parameter_light_e, firewall_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; + return; + } } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; - fll_program_parameter_process_empty(&main->context, sets); - } + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { firewall_parameter_verbosity_quiet_e, firewall_parameter_verbosity_error_e, firewall_parameter_verbosity_verbose_e, firewall_parameter_verbosity_debug_e, firewall_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - if (F_status_is_error(status)) return status; - } + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { firewall_parameter_verbosity_quiet_e, firewall_parameter_verbosity_error_e, firewall_parameter_verbosity_normal_e, firewall_parameter_verbosity_verbose_e, firewall_parameter_verbosity_debug_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 4); - f_console_parameter_id_t choice = 0; + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); - if (F_status_is_error(status)) return status; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == firewall_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == firewall_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == firewall_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == firewall_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == firewall_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } diff --git a/level_3/firewall/c/firewall.h b/level_3/firewall/c/firewall.h index 23e80007c..37032a5f9 100644 --- a/level_3/firewall/c/firewall.h +++ b/level_3/firewall/c/firewall.h @@ -93,7 +93,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_firewall_main_ - extern f_status_t firewall_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t firewall_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_firewall_main_ #ifdef __cplusplus diff --git a/level_3/firewall/c/main.c b/level_3/firewall/c/main.c index cb52c8829..6a931ef8d 100644 --- a/level_3/firewall/c/main.c +++ b/level_3/firewall/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = firewall_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = firewall_main(&data, &arguments); + const f_status_t status = firewall_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (status == F_child) { exit(data.child); diff --git a/level_3/firewall/c/private-firewall.c b/level_3/firewall/c/private-firewall.c index c52005fda..0a63bd53e 100644 --- a/level_3/firewall/c/private-firewall.c +++ b/level_3/firewall/c/private-firewall.c @@ -80,7 +80,7 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca ip_list.used = 0; - // Process chain rule + // Process chain rule. if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_chain_s, length) == F_equal_to) { if (chain == firewall_chain_custom_id_e) { @@ -578,13 +578,13 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca firewall_print_error_on_unhandled(data->main->error, "f_file_open", F_status_set_fine(status)); } - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } else { status = f_file_read(file, &local_buffer); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { @@ -1160,7 +1160,7 @@ f_status_t firewall_buffer_rules(firewall_data_t * const data, const f_string_st status = f_file_read(file, &local->buffer); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/firewall/data/build/settings b/level_3/firewall/data/build/settings index 1c938fdd5..223d86788 100644 --- a/level_3/firewall/data/build/settings +++ b/level_3/firewall/data/build/settings @@ -3,7 +3,7 @@ build_name firewall version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_basic_list_read/c/common.h b/level_3/fss_basic_list_read/c/common.h index e7a5851a3..d5b5285e7 100644 --- a/level_3/fss_basic_list_read/c/common.h +++ b/level_3/fss_basic_list_read/c/common.h @@ -195,6 +195,8 @@ extern "C" { fss_basic_list_read_parameter_verbosity_verbose_e, fss_basic_list_read_parameter_verbosity_debug_e, fss_basic_list_read_parameter_version_e, + fss_basic_list_read_parameter_line_first_no_e, + fss_basic_list_read_parameter_line_last_no_e, fss_basic_list_read_parameter_at_e, fss_basic_list_read_parameter_content_e, @@ -214,33 +216,36 @@ extern "C" { #define fss_basic_list_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_at_s.string, fss_basic_list_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_content_s.string, fss_basic_list_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_columns_s.string, fss_basic_list_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_delimit_s.string, fss_basic_list_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_depth_s.string, fss_basic_list_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_empty_s.string, fss_basic_list_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_line_s.string, fss_basic_list_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_name_s.string, fss_basic_list_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_object_s.string, fss_basic_list_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_pipe_s.string, fss_basic_list_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_original_s.string, fss_basic_list_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_select_s.string, fss_basic_list_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_total_s.string, fss_basic_list_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_read_short_trim_s.string, fss_basic_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_at_s.string, fss_basic_list_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_content_s.string, fss_basic_list_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_columns_s.string, fss_basic_list_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_delimit_s.string, fss_basic_list_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_depth_s.string, fss_basic_list_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_empty_s.string, fss_basic_list_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_line_s.string, fss_basic_list_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_name_s.string, fss_basic_list_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_object_s.string, fss_basic_list_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_pipe_s.string, fss_basic_list_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_original_s.string, fss_basic_list_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_select_s.string, fss_basic_list_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_total_s.string, fss_basic_list_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_read_short_trim_s.string, fss_basic_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_basic_list_read_total_parameters_d 24 + #define fss_basic_list_read_total_parameters_d 26 #endif // _di_fss_basic_list_read_parameters_ /** diff --git a/level_3/fss_basic_list_read/c/fss_basic_list_read.c b/level_3/fss_basic_list_read/c/fss_basic_list_read.c index edd21887d..53f2c8eeb 100644 --- a/level_3/fss_basic_list_read/c/fss_basic_list_read.c +++ b/level_3/fss_basic_list_read/c/fss_basic_list_read.c @@ -12,18 +12,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_basic_list_read_program_name_long_s, fss_basic_list_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -44,7 +39,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_basic_list_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will print the Content associated with the given Object and Content main based on the FSS-0002 Basic List standard.%r%r", file.stream, f_string_eol_s, f_string_eol_s); @@ -110,8 +105,13 @@ extern "C" { fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_read_long_select_s, context.set.notable); fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s); fl_print_format(" The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s); - fl_print_format(" This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This is not to be confused with a depth.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -119,77 +119,50 @@ extern "C" { #endif // _di_fss_basic_list_read_print_help_ #ifndef _di_fss_basic_list_read_main_ - f_status_t fss_basic_list_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_basic_list_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_basic_list_read_parameter_no_color_e, fss_basic_list_read_parameter_light_e, fss_basic_list_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = { ids, 3 }; + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_basic_list_read_parameter_no_color_e, fss_basic_list_read_parameter_light_e, fss_basic_list_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_basic_list_read_parameter_verbosity_quiet_e, fss_basic_list_read_parameter_verbosity_error_e, fss_basic_list_read_parameter_verbosity_normal_e, fss_basic_list_read_parameter_verbosity_verbose_e, fss_basic_list_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_basic_list_read_parameter_verbosity_quiet_e, fss_basic_list_read_parameter_verbosity_error_e, fss_basic_list_read_parameter_verbosity_verbose_e, fss_basic_list_read_parameter_verbosity_debug_e, fss_basic_list_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_basic_list_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_basic_list_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_basic_list_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_basic_list_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_basic_list_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -219,7 +192,7 @@ extern "C" { data.files.array[0].range.start = 1; data.files.array[0].range.stop = 0; - if (main->parameters.remaining.used || main->process_pipe) { + if (main->parameters.remaining.used || (main->pipe & fll_program_data_pipe_input_e)) { { const f_array_length_t parameter_code[] = { fss_basic_list_read_parameter_at_e, @@ -495,7 +468,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -564,7 +537,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -591,7 +564,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_increase_by", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -612,7 +585,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { @@ -641,7 +614,7 @@ extern "C" { } } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } diff --git a/level_3/fss_basic_list_read/c/fss_basic_list_read.h b/level_3/fss_basic_list_read/c/fss_basic_list_read.h index a92e7b883..857aca433 100644 --- a/level_3/fss_basic_list_read/c/fss_basic_list_read.h +++ b/level_3/fss_basic_list_read/c/fss_basic_list_read.h @@ -91,7 +91,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_basic_list_read_main_ - extern f_status_t fss_basic_list_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_basic_list_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_basic_list_read_main_ #ifdef __cplusplus diff --git a/level_3/fss_basic_list_read/c/main.c b/level_3/fss_basic_list_read/c/main.c index 0ded01b24..eac022416 100644 --- a/level_3/fss_basic_list_read/c/main.c +++ b/level_3/fss_basic_list_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_basic_list_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_basic_list_read_main(&data, &arguments); + const f_status_t status = fss_basic_list_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_basic_list_read/data/build/settings b/level_3/fss_basic_list_read/data/build/settings index 53aa7908e..1bd191974 100644 --- a/level_3/fss_basic_list_read/data/build/settings +++ b/level_3/fss_basic_list_read/data/build/settings @@ -3,7 +3,7 @@ build_name fss_basic_list_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_basic_list_write/c/common.h b/level_3/fss_basic_list_write/c/common.h index ac1a6b2df..3a7985b26 100644 --- a/level_3/fss_basic_list_write/c/common.h +++ b/level_3/fss_basic_list_write/c/common.h @@ -165,6 +165,8 @@ extern "C" { fss_basic_list_write_parameter_verbosity_verbose_e, fss_basic_list_write_parameter_verbosity_debug_e, fss_basic_list_write_parameter_version_e, + fss_basic_list_write_parameter_line_first_no_e, + fss_basic_list_write_parameter_line_last_no_e, fss_basic_list_write_parameter_file_e, fss_basic_list_write_parameter_content_e, @@ -179,28 +181,31 @@ extern "C" { #define fss_basic_list_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_file_s.string, fss_basic_list_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_content_s.string, fss_basic_list_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_double_s.string, fss_basic_list_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_ignore_s.string, fss_basic_list_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_object_s.string, fss_basic_list_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_partial_s.string, fss_basic_list_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_prepend_s.string, fss_basic_list_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_single_s.string, fss_basic_list_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_list_write_short_trim_s.string, fss_basic_list_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_file_s.string, fss_basic_list_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_content_s.string, fss_basic_list_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_double_s.string, fss_basic_list_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_ignore_s.string, fss_basic_list_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_object_s.string, fss_basic_list_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_partial_s.string, fss_basic_list_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_prepend_s.string, fss_basic_list_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_single_s.string, fss_basic_list_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_list_write_short_trim_s.string, fss_basic_list_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_basic_list_write_total_parameters_d 19 + #define fss_basic_list_write_total_parameters_d 21 #endif // _di_fss_basic_list_write_parameters_ #ifdef __cplusplus diff --git a/level_3/fss_basic_list_write/c/fss_basic_list_write.c b/level_3/fss_basic_list_write/c/fss_basic_list_write.c index 6a91c6f9e..3c233d0a6 100644 --- a/level_3/fss_basic_list_write/c/fss_basic_list_write.c +++ b/level_3/fss_basic_list_write/c/fss_basic_list_write.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_basic_list_write_program_name_long_s, fss_basic_list_write_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -38,7 +33,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_basic_list_write_program_name_s, f_string_empty_s); - fl_print_format(" The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); + fl_print_format("%r The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, f_string_eol_s, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Form Feed character '%[\\f%]' (%[U+000C%]) to designate the end of the last Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Vertical Line character '%[\\v%]' (%[U+000B%]) is used to ignore a Content range, which does nothing in this program.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" For the pipe, an Object is terminated by either a Backspace character '%[\\b%]' (%[U+0008%])", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable); @@ -49,8 +44,13 @@ extern "C" { fl_print_format(" and '%[%r%r%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_list_write_long_ignore_s, context.set.notable, f_string_eol_s); - fl_print_format(" This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This parameter requires two values.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -58,77 +58,50 @@ extern "C" { #endif // _di_fss_basic_list_write_print_help_ #ifndef _di_fss_basic_list_write_main_ - f_status_t fss_basic_list_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_basic_list_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_basic_list_write_parameter_no_color_e, fss_basic_list_write_parameter_light_e, fss_basic_list_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_basic_list_write_parameter_no_color_e, fss_basic_list_write_parameter_light_e, fss_basic_list_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_basic_list_write_parameter_verbosity_quiet_e, fss_basic_list_write_parameter_verbosity_error_e, fss_basic_list_write_parameter_verbosity_normal_e, fss_basic_list_write_parameter_verbosity_verbose_e, fss_basic_list_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_basic_list_write_parameter_verbosity_quiet_e, fss_basic_list_write_parameter_verbosity_error_e, fss_basic_list_write_parameter_verbosity_verbose_e, fss_basic_list_write_parameter_verbosity_debug_e, fss_basic_list_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_basic_list_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_basic_list_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_basic_list_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_basic_list_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_basic_list_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -269,7 +242,7 @@ extern "C" { } } } - else if (!main->process_pipe) { + else if (!(main->pipe & fll_program_data_pipe_input_e)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -285,7 +258,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_basic_list_write_parameter_partial_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -411,7 +384,7 @@ extern "C" { f_string_dynamic_t buffer = f_string_dynamic_t_initialize; if (F_status_is_error_not(status)) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { status = fss_basic_list_write_process_pipe(main, output, quoted, &buffer); if (F_status_is_error(status)) { @@ -514,7 +487,7 @@ extern "C" { } if (main->parameters.array[fss_basic_list_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&output); + f_file_stream_flush(output); f_file_stream_close(&output); } diff --git a/level_3/fss_basic_list_write/c/fss_basic_list_write.h b/level_3/fss_basic_list_write/c/fss_basic_list_write.h index 68a293b31..7e896fcc3 100644 --- a/level_3/fss_basic_list_write/c/fss_basic_list_write.h +++ b/level_3/fss_basic_list_write/c/fss_basic_list_write.h @@ -83,7 +83,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_basic_list_write_main_ - extern f_status_t fss_basic_list_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_basic_list_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_basic_list_write_main_ #ifdef __cplusplus diff --git a/level_3/fss_basic_list_write/c/main.c b/level_3/fss_basic_list_write/c/main.c index 5135c63dc..180951474 100644 --- a/level_3/fss_basic_list_write/c/main.c +++ b/level_3/fss_basic_list_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_basic_list_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_basic_list_write_main(&data, &arguments); + const f_status_t status = fss_basic_list_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_basic_list_write/data/build/settings b/level_3/fss_basic_list_write/data/build/settings index 536e7a4b4..2168e1469 100644 --- a/level_3/fss_basic_list_write/data/build/settings +++ b/level_3/fss_basic_list_write/data/build/settings @@ -3,7 +3,7 @@ build_name fss_basic_list_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_basic_read/c/common.h b/level_3/fss_basic_read/c/common.h index 5a1735efd..33b2f0169 100644 --- a/level_3/fss_basic_read/c/common.h +++ b/level_3/fss_basic_read/c/common.h @@ -195,6 +195,8 @@ extern "C" { fss_basic_read_parameter_verbosity_verbose_e, fss_basic_read_parameter_verbosity_debug_e, fss_basic_read_parameter_version_e, + fss_basic_read_parameter_line_first_no_e, + fss_basic_read_parameter_line_last_no_e, fss_basic_read_parameter_at_e, fss_basic_read_parameter_content_e, @@ -214,33 +216,36 @@ extern "C" { #define fss_basic_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_at_s.string, fss_basic_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_content_s.string, fss_basic_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_columns_s.string, fss_basic_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_delimit_s.string, fss_basic_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_depth_s.string, fss_basic_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_empty_s.string, fss_basic_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_line_s.string, fss_basic_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_name_s.string, fss_basic_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_object_s.string, fss_basic_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_pipe_s.string, fss_basic_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_original_s.string, fss_basic_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_select_s.string, fss_basic_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_total_s.string, fss_basic_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_read_short_trim_s.string, fss_basic_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_at_s.string, fss_basic_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_content_s.string, fss_basic_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_columns_s.string, fss_basic_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_delimit_s.string, fss_basic_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_depth_s.string, fss_basic_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_empty_s.string, fss_basic_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_line_s.string, fss_basic_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_name_s.string, fss_basic_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_object_s.string, fss_basic_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_pipe_s.string, fss_basic_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_original_s.string, fss_basic_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_select_s.string, fss_basic_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_total_s.string, fss_basic_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_read_short_trim_s.string, fss_basic_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_basic_read_total_parameters_d 24 + #define fss_basic_read_total_parameters_d 26 #endif // _di_fss_basic_read_parameters_ /** diff --git a/level_3/fss_basic_read/c/fss_basic_read.c b/level_3/fss_basic_read/c/fss_basic_read.c index 7bbce28b9..71a178b30 100644 --- a/level_3/fss_basic_read/c/fss_basic_read.c +++ b/level_3/fss_basic_read/c/fss_basic_read.c @@ -12,18 +12,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_basic_read_program_name_long_s, fss_basic_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -44,7 +39,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_basic_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will print the Content associated with the given Object and Content main based on the FSS-0000 Basic standard.%r%r", file.stream, f_string_eol_s, f_string_eol_s); @@ -110,8 +105,13 @@ extern "C" { fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_read_long_select_s, context.set.notable); fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s); fl_print_format(" The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s); - fl_print_format(" This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This is not to be confused with a depth.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -119,77 +119,50 @@ extern "C" { #endif // _di_fss_basic_read_print_help_ #ifndef _di_fss_basic_read_main_ - f_status_t fss_basic_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_basic_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_basic_read_parameter_no_color_e, fss_basic_read_parameter_light_e, fss_basic_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_basic_read_parameter_no_color_e, fss_basic_read_parameter_light_e, fss_basic_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_basic_read_parameter_verbosity_quiet_e, fss_basic_read_parameter_verbosity_error_e, fss_basic_read_parameter_verbosity_normal_e, fss_basic_read_parameter_verbosity_verbose_e, fss_basic_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_basic_read_parameter_verbosity_quiet_e, fss_basic_read_parameter_verbosity_error_e, fss_basic_read_parameter_verbosity_verbose_e, fss_basic_read_parameter_verbosity_debug_e, fss_basic_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_basic_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_basic_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_basic_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_basic_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_basic_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -219,7 +192,7 @@ extern "C" { data.files.array[0].range.start = 1; data.files.array[0].range.stop = 0; - if (main->parameters.remaining.used || main->process_pipe) { + if (main->parameters.remaining.used || (main->pipe & fll_program_data_pipe_input_e)) { { const f_array_length_t parameter_code[] = { fss_basic_read_parameter_at_e, @@ -503,7 +476,7 @@ extern "C" { } // for } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -571,7 +544,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -598,7 +571,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -619,7 +592,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/fss_basic_read/c/fss_basic_read.h b/level_3/fss_basic_read/c/fss_basic_read.h index 7a3b50cc1..aac0e6b78 100644 --- a/level_3/fss_basic_read/c/fss_basic_read.h +++ b/level_3/fss_basic_read/c/fss_basic_read.h @@ -91,7 +91,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_basic_read_main_ - extern f_status_t fss_basic_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_basic_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_basic_read_main_ #ifdef __cplusplus diff --git a/level_3/fss_basic_read/c/main.c b/level_3/fss_basic_read/c/main.c index cdddcca9a..ddd18479b 100644 --- a/level_3/fss_basic_read/c/main.c +++ b/level_3/fss_basic_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_basic_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_basic_read_main(&data, &arguments); + const f_status_t status = fss_basic_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_basic_read/data/build/settings b/level_3/fss_basic_read/data/build/settings index 065c6d205..081696b9a 100644 --- a/level_3/fss_basic_read/data/build/settings +++ b/level_3/fss_basic_read/data/build/settings @@ -3,7 +3,7 @@ build_name fss_basic_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_basic_write/c/common.h b/level_3/fss_basic_write/c/common.h index 095e36679..c0764f4d0 100644 --- a/level_3/fss_basic_write/c/common.h +++ b/level_3/fss_basic_write/c/common.h @@ -165,6 +165,8 @@ extern "C" { fss_basic_write_parameter_verbosity_verbose_e, fss_basic_write_parameter_verbosity_debug_e, fss_basic_write_parameter_version_e, + fss_basic_write_parameter_line_first_no_e, + fss_basic_write_parameter_line_last_no_e, fss_basic_write_parameter_file_e, fss_basic_write_parameter_content_e, @@ -179,28 +181,31 @@ extern "C" { #define fss_basic_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_file_s.string, fss_basic_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_content_s.string, fss_basic_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_double_s.string, fss_basic_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_ignore_s.string, fss_basic_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_object_s.string, fss_basic_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_partial_s.string, fss_basic_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_prepend_s.string, fss_basic_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_single_s.string, fss_basic_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_basic_write_short_trim_s.string, fss_basic_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_file_s.string, fss_basic_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_content_s.string, fss_basic_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_double_s.string, fss_basic_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_ignore_s.string, fss_basic_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_object_s.string, fss_basic_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_partial_s.string, fss_basic_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_prepend_s.string, fss_basic_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_single_s.string, fss_basic_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_basic_write_short_trim_s.string, fss_basic_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_basic_write_total_parameters_d 18 + #define fss_basic_write_total_parameters_d 20 #endif // _di_fss_basic_write_parameters_ #ifdef __cplusplus diff --git a/level_3/fss_basic_write/c/fss_basic_write.c b/level_3/fss_basic_write/c/fss_basic_write.c index 5f05c505a..448fdd610 100644 --- a/level_3/fss_basic_write/c/fss_basic_write.c +++ b/level_3/fss_basic_write/c/fss_basic_write.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_basic_write_program_name_long_s, fss_basic_write_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -38,7 +33,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_basic_write_program_name_s, f_string_empty_s); - fl_print_format(" The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); + fl_print_format("%r The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, f_string_eol_s, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Form Feed character '%[\\f%]' (%[U+000C%]) to designate the end of the last Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Vertical Line character '%[\\v%]' (%[U+000B%]) is used to ignore a Content range, which does nothing in this program.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" For the pipe, an Object is terminated by either a Backspace character '%[\\b%]' (%[U+0008%])", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable); @@ -49,8 +44,13 @@ extern "C" { fl_print_format(" does nothing.%r%r", file.stream, f_string_eol_s, f_string_eol_s); fl_print_format(" This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_basic_write_long_ignore_s, context.set.notable, f_string_eol_s); - fl_print_format(" This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This parameter requires two values.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -58,77 +58,50 @@ extern "C" { #endif // _di_fss_basic_write_print_help_ #ifndef _di_fss_basic_write_main_ - f_status_t fss_basic_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_basic_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_basic_write_parameter_no_color_e, fss_basic_write_parameter_light_e, fss_basic_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_basic_write_parameter_no_color_e, fss_basic_write_parameter_light_e, fss_basic_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_basic_write_parameter_verbosity_quiet_e, fss_basic_write_parameter_verbosity_error_e, fss_basic_write_parameter_verbosity_normal_e, fss_basic_write_parameter_verbosity_verbose_e, fss_basic_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_basic_write_parameter_verbosity_quiet_e, fss_basic_write_parameter_verbosity_error_e, fss_basic_write_parameter_verbosity_verbose_e, fss_basic_write_parameter_verbosity_debug_e, fss_basic_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_basic_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_basic_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_basic_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_basic_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_basic_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -267,7 +240,7 @@ extern "C" { } } } - else if (!main->process_pipe) { + else if (!(main->pipe & fll_program_data_pipe_input_e)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -283,7 +256,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_basic_write_parameter_partial_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -410,7 +383,7 @@ extern "C" { f_string_dynamic_t buffer = f_string_dynamic_t_initialize; if (F_status_is_error_not(status)) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { status = fss_basic_write_process_pipe(main, output, quote, &buffer); if (F_status_is_error(status)) { @@ -505,7 +478,7 @@ extern "C" { } if (main->parameters.array[fss_basic_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&output); + f_file_stream_flush(output); f_file_stream_close(&output); } diff --git a/level_3/fss_basic_write/c/fss_basic_write.h b/level_3/fss_basic_write/c/fss_basic_write.h index 41ff14b5a..21d11c969 100644 --- a/level_3/fss_basic_write/c/fss_basic_write.h +++ b/level_3/fss_basic_write/c/fss_basic_write.h @@ -83,7 +83,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_basic_write_main_ - extern f_status_t fss_basic_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_basic_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_basic_write_main_ #ifdef __cplusplus diff --git a/level_3/fss_basic_write/c/main.c b/level_3/fss_basic_write/c/main.c index 059d3fa46..0c1a9a5bd 100644 --- a/level_3/fss_basic_write/c/main.c +++ b/level_3/fss_basic_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_basic_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_basic_write_main(&data, &arguments); + const f_status_t status = fss_basic_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_basic_write/data/build/settings b/level_3/fss_basic_write/data/build/settings index 023953c2b..12f063769 100644 --- a/level_3/fss_basic_write/data/build/settings +++ b/level_3/fss_basic_write/data/build/settings @@ -3,7 +3,7 @@ build_name fss_basic_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_embedded_list_read/c/common.h b/level_3/fss_embedded_list_read/c/common.h index 0b6b9d96b..70f025ad4 100644 --- a/level_3/fss_embedded_list_read/c/common.h +++ b/level_3/fss_embedded_list_read/c/common.h @@ -195,6 +195,8 @@ extern "C" { fss_embedded_list_read_parameter_verbosity_verbose_e, fss_embedded_list_read_parameter_verbosity_debug_e, fss_embedded_list_read_parameter_version_e, + fss_embedded_list_read_parameter_line_first_no_e, + fss_embedded_list_read_parameter_line_last_no_e, fss_embedded_list_read_parameter_at_e, fss_embedded_list_read_parameter_content_e, @@ -214,33 +216,36 @@ extern "C" { #define fss_embedded_list_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_at_s.string, fss_embedded_list_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_content_s.string, fss_embedded_list_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_columns_s.string, fss_embedded_list_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_delimit_s.string, fss_embedded_list_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_depth_s.string, fss_embedded_list_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_empty_s.string, fss_embedded_list_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_line_s.string, fss_embedded_list_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_name_s.string, fss_embedded_list_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_object_s.string, fss_embedded_list_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_pipe_s.string, fss_embedded_list_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_original_s.string, fss_embedded_list_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_select_s.string, fss_embedded_list_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_total_s.string, fss_embedded_list_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_read_short_trim_s.string, fss_embedded_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_at_s.string, fss_embedded_list_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_content_s.string, fss_embedded_list_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_columns_s.string, fss_embedded_list_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_delimit_s.string, fss_embedded_list_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_depth_s.string, fss_embedded_list_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_empty_s.string, fss_embedded_list_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_line_s.string, fss_embedded_list_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_name_s.string, fss_embedded_list_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_object_s.string, fss_embedded_list_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_pipe_s.string, fss_embedded_list_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_original_s.string, fss_embedded_list_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_select_s.string, fss_embedded_list_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_total_s.string, fss_embedded_list_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_read_short_trim_s.string, fss_embedded_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_embedded_list_read_total_parameters_d 24 + #define fss_embedded_list_read_total_parameters_d 26 #endif // _di_fss_embedded_list_read_parameters_ /** diff --git a/level_3/fss_embedded_list_read/c/fss_embedded_list_read.c b/level_3/fss_embedded_list_read/c/fss_embedded_list_read.c index 2762431a5..3eb1dba03 100644 --- a/level_3/fss_embedded_list_read/c/fss_embedded_list_read.c +++ b/level_3/fss_embedded_list_read/c/fss_embedded_list_read.c @@ -12,18 +12,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_embedded_list_read_program_name_long_s, fss_embedded_list_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -44,7 +39,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_embedded_list_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will print the Content associated with the given Object and Content main based on the FSS-0008 Embedded List standard.%r%r", file.stream, f_string_eol_s, f_string_eol_s); @@ -109,8 +104,13 @@ extern "C" { fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_read_long_select_s, context.set.notable); fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s); fl_print_format(" The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s); - fl_print_format(" This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This is not to be confused with a depth.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -118,77 +118,50 @@ extern "C" { #endif // _di_fss_embedded_list_read_print_help_ #ifndef _di_fss_embedded_list_read_main_ - f_status_t fss_embedded_list_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_embedded_list_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_embedded_list_read_parameter_no_color_e, fss_embedded_list_read_parameter_light_e, fss_embedded_list_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_embedded_list_read_parameter_no_color_e, fss_embedded_list_read_parameter_light_e, fss_embedded_list_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_embedded_list_read_parameter_verbosity_quiet_e, fss_embedded_list_read_parameter_verbosity_error_e, fss_embedded_list_read_parameter_verbosity_verbose_e, fss_embedded_list_read_parameter_verbosity_debug_e, fss_embedded_list_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_embedded_list_read_parameter_verbosity_quiet_e, fss_embedded_list_read_parameter_verbosity_error_e, fss_embedded_list_read_parameter_verbosity_normal_e, fss_embedded_list_read_parameter_verbosity_verbose_e, fss_embedded_list_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); - - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_embedded_list_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_embedded_list_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_embedded_list_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_embedded_list_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_embedded_list_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -224,7 +197,7 @@ extern "C" { } } - if (main->parameters.remaining.used > 0 || main->process_pipe) { + if (main->parameters.remaining.used > 0 || (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_embedded_list_read_parameter_at_e].result == f_console_result_found_e) { flockfile(main->error.to.stream); @@ -396,7 +369,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -457,7 +430,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -469,7 +442,7 @@ extern "C" { fll_print_format("%r%r", main->output.to.stream, f_string_ascii_0_s, f_string_eol_s); } - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); continue; @@ -494,7 +467,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -515,7 +488,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h b/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h index 240f75933..f6e853d6c 100644 --- a/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h +++ b/level_3/fss_embedded_list_read/c/fss_embedded_list_read.h @@ -91,7 +91,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_embedded_list_read_main_ - extern f_status_t fss_embedded_list_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_embedded_list_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_embedded_list_read_main_ #ifdef __cplusplus diff --git a/level_3/fss_embedded_list_read/c/main.c b/level_3/fss_embedded_list_read/c/main.c index 66a29c5bc..fa84dae30 100644 --- a/level_3/fss_embedded_list_read/c/main.c +++ b/level_3/fss_embedded_list_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_embedded_list_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_embedded_list_read_main(&data, &arguments); + const f_status_t status = fss_embedded_list_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_embedded_list_read/c/private-common.h b/level_3/fss_embedded_list_read/c/private-common.h index 2d4b07a2a..30ef1431a 100644 --- a/level_3/fss_embedded_list_read/c/private-common.h +++ b/level_3/fss_embedded_list_read/c/private-common.h @@ -120,8 +120,13 @@ extern "C" { /** * The program data. * - * process_pipe: Designate whether or not to process the input pipe. - * context: The color context. + * main: + * argv: + * + * buffer: + * nest: + * delimit_mode: + * delimit_depth: */ #ifndef _di_fss_embedded_list_read_data_t_ typedef struct { diff --git a/level_3/fss_embedded_list_read/data/build/settings b/level_3/fss_embedded_list_read/data/build/settings index 794154991..d00cd4677 100644 --- a/level_3/fss_embedded_list_read/data/build/settings +++ b/level_3/fss_embedded_list_read/data/build/settings @@ -3,7 +3,7 @@ build_name fss_embedded_list_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_embedded_list_write/c/common.h b/level_3/fss_embedded_list_write/c/common.h index 0bdc22ebe..6351e6511 100644 --- a/level_3/fss_embedded_list_write/c/common.h +++ b/level_3/fss_embedded_list_write/c/common.h @@ -165,6 +165,8 @@ extern "C" { fss_embedded_list_write_parameter_verbosity_verbose_e, fss_embedded_list_write_parameter_verbosity_debug_e, fss_embedded_list_write_parameter_version_e, + fss_embedded_list_write_parameter_line_first_no_e, + fss_embedded_list_write_parameter_line_last_no_e, fss_embedded_list_write_parameter_file_e, fss_embedded_list_write_parameter_content_e, @@ -179,28 +181,31 @@ extern "C" { #define fss_embedded_list_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_file_s.string, fss_embedded_list_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_content_s.string, fss_embedded_list_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_double_s.string, fss_embedded_list_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_ignore_s.string, fss_embedded_list_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_object_s.string, fss_embedded_list_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_partial_s.string, fss_embedded_list_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_prepend_s.string, fss_embedded_list_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_single_s.string, fss_embedded_list_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_embedded_list_write_short_trim_s.string, fss_embedded_list_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_file_s.string, fss_embedded_list_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_content_s.string, fss_embedded_list_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_double_s.string, fss_embedded_list_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_ignore_s.string, fss_embedded_list_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_object_s.string, fss_embedded_list_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_partial_s.string, fss_embedded_list_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_prepend_s.string, fss_embedded_list_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_single_s.string, fss_embedded_list_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_embedded_list_write_short_trim_s.string, fss_embedded_list_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_embedded_list_write_total_parameters_d 19 + #define fss_embedded_list_write_total_parameters_d 21 #endif // _di_fss_embedded_list_write_parameters_ #ifdef __cplusplus diff --git a/level_3/fss_embedded_list_write/c/fss_embedded_list_write.c b/level_3/fss_embedded_list_write/c/fss_embedded_list_write.c index 67d5f8950..ddfb5f1d5 100644 --- a/level_3/fss_embedded_list_write/c/fss_embedded_list_write.c +++ b/level_3/fss_embedded_list_write/c/fss_embedded_list_write.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_embedded_list_write_program_name_long_s, fss_embedded_list_write_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -38,7 +33,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_embedded_list_write_program_name_s, f_string_empty_s); - fl_print_format(" The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); + fl_print_format("%r The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, f_string_eol_s, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Form Feed character '%[\\f%]' (%[U+000C%]) to designate the end of the last Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Vertical Line character '%[\\v%]' (%[U+000B%]) is used to ignore a Content range (use this both before and after the range).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" For the pipe, an Object is terminated by either a Backspace character '%[\\b%]' (%[U+0008%])", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable); @@ -52,8 +47,13 @@ extern "C" { fl_print_format(" This parameter requires two values.%r", file.stream, f_string_eol_s); fl_print_format(" This parameter is not used for ignoring anything from the input pipe.%r", file.stream, f_string_eol_s); fl_print_format(" This parameter must be specified after a '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable); - fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%r%]' parameter.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%r%]' parameter.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_embedded_list_write_long_content_s, context.set.notable, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -61,77 +61,50 @@ extern "C" { #endif // _di_fss_embedded_list_write_print_help_ #ifndef _di_fss_embedded_list_write_main_ - f_status_t fss_embedded_list_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_embedded_list_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_embedded_list_write_parameter_no_color_e, fss_embedded_list_write_parameter_light_e, fss_embedded_list_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + setting->status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(setting->status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_embedded_list_write_parameter_no_color_e, fss_embedded_list_write_parameter_light_e, fss_embedded_list_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_embedded_list_write_parameter_verbosity_quiet_e, fss_embedded_list_write_parameter_verbosity_error_e, fss_embedded_list_write_parameter_verbosity_normal_e, fss_embedded_list_write_parameter_verbosity_verbose_e, fss_embedded_list_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_embedded_list_write_parameter_verbosity_quiet_e, fss_embedded_list_write_parameter_verbosity_error_e, fss_embedded_list_write_parameter_verbosity_verbose_e, fss_embedded_list_write_parameter_verbosity_debug_e, fss_embedded_list_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_embedded_list_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_embedded_list_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_embedded_list_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_embedded_list_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_embedded_list_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -270,7 +243,7 @@ extern "C" { } } } - else if (!main->process_pipe) { + else if (!(main->pipe & fll_program_data_pipe_input_e)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -286,7 +259,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_embedded_list_write_parameter_partial_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -414,7 +387,7 @@ extern "C" { if (F_status_is_error_not(status)) { f_string_ranges_t ignore = f_string_ranges_t_initialize; - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { status = fss_embedded_list_write_process_pipe(main, output, quote, &buffer, &ignore); if (F_status_is_error(status) && F_status_set_fine(status) != F_interrupt) { @@ -520,7 +493,7 @@ extern "C" { } if (main->parameters.array[fss_embedded_list_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&output); + f_file_stream_flush(output); f_file_stream_close(&output); } diff --git a/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h b/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h index 9cc40c75e..23002ef00 100644 --- a/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h +++ b/level_3/fss_embedded_list_write/c/fss_embedded_list_write.h @@ -86,7 +86,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_embedded_list_write_main_ - extern f_status_t fss_embedded_list_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_embedded_list_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_embedded_list_write_main_ #ifdef __cplusplus diff --git a/level_3/fss_embedded_list_write/c/main.c b/level_3/fss_embedded_list_write/c/main.c index 257b8a2c6..bd708bdb8 100644 --- a/level_3/fss_embedded_list_write/c/main.c +++ b/level_3/fss_embedded_list_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_embedded_list_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_embedded_list_write_main(&data, &arguments); + const f_status_t status = fss_embedded_list_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_embedded_list_write/data/build/settings b/level_3/fss_embedded_list_write/data/build/settings index 4020d7761..ee5cdf493 100644 --- a/level_3/fss_embedded_list_write/data/build/settings +++ b/level_3/fss_embedded_list_write/data/build/settings @@ -3,7 +3,7 @@ build_name fss_embedded_list_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_extended_list_read/c/common.h b/level_3/fss_extended_list_read/c/common.h index 5a0f78bd2..59b7d8e72 100644 --- a/level_3/fss_extended_list_read/c/common.h +++ b/level_3/fss_extended_list_read/c/common.h @@ -195,6 +195,8 @@ extern "C" { fss_extended_list_read_parameter_verbosity_verbose_e, fss_extended_list_read_parameter_verbosity_debug_e, fss_extended_list_read_parameter_version_e, + fss_extended_list_read_parameter_line_first_no_e, + fss_extended_list_read_parameter_line_last_no_e, fss_extended_list_read_parameter_at_e, fss_extended_list_read_parameter_content_e, @@ -214,33 +216,36 @@ extern "C" { #define fss_extended_list_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_at_s.string, fss_extended_list_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_content_s.string, fss_extended_list_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_columns_s.string, fss_extended_list_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_delimit_s.string, fss_extended_list_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_depth_s.string, fss_extended_list_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_empty_s.string, fss_extended_list_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_line_s.string, fss_extended_list_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_name_s.string, fss_extended_list_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_object_s.string, fss_extended_list_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_pipe_s.string, fss_extended_list_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_original_s.string, fss_extended_list_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_select_s.string, fss_extended_list_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_total_s.string, fss_extended_list_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_read_short_trim_s.string, fss_extended_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_at_s.string, fss_extended_list_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_content_s.string, fss_extended_list_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_columns_s.string, fss_extended_list_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_delimit_s.string, fss_extended_list_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_depth_s.string, fss_extended_list_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_empty_s.string, fss_extended_list_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_line_s.string, fss_extended_list_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_name_s.string, fss_extended_list_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_object_s.string, fss_extended_list_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_pipe_s.string, fss_extended_list_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_original_s.string, fss_extended_list_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_select_s.string, fss_extended_list_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_total_s.string, fss_extended_list_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_read_short_trim_s.string, fss_extended_list_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_extended_list_read_total_parameters_d 24 + #define fss_extended_list_read_total_parameters_d 26 #endif // _di_fss_extended_list_read_parameters_ /** diff --git a/level_3/fss_extended_list_read/c/fss_extended_list_read.c b/level_3/fss_extended_list_read/c/fss_extended_list_read.c index aa2348666..9981c3967 100644 --- a/level_3/fss_extended_list_read/c/fss_extended_list_read.c +++ b/level_3/fss_extended_list_read/c/fss_extended_list_read.c @@ -12,18 +12,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_extended_list_read_program_name_long_s, fss_extended_list_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -44,7 +39,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_extended_list_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will print the Content associated with the given Object and Content main based on the FSS-0003 Extended List standard.%r%r", file.stream, f_string_eol_s, f_string_eol_s); @@ -110,8 +105,13 @@ extern "C" { fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_read_long_select_s, context.set.notable); fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s); fl_print_format(" The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s); - fl_print_format(" This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This is not to be confused with a depth.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -119,77 +119,50 @@ extern "C" { #endif // _di_fss_extended_list_read_print_help_ #ifndef _di_fss_extended_list_read_main_ - f_status_t fss_extended_list_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_extended_list_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_extended_list_read_parameter_no_color_e, fss_extended_list_read_parameter_light_e, fss_extended_list_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = { ids, 3 }; + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_extended_list_read_parameter_no_color_e, fss_extended_list_read_parameter_light_e, fss_extended_list_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_extended_list_read_parameter_verbosity_quiet_e, fss_extended_list_read_parameter_verbosity_error_e, fss_extended_list_read_parameter_verbosity_normal_e, fss_extended_list_read_parameter_verbosity_verbose_e, fss_extended_list_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_extended_list_read_parameter_verbosity_quiet_e, fss_extended_list_read_parameter_verbosity_error_e, fss_extended_list_read_parameter_verbosity_verbose_e, fss_extended_list_read_parameter_verbosity_debug_e, fss_extended_list_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_extended_list_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_extended_list_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_extended_list_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_extended_list_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_extended_list_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -219,7 +192,7 @@ extern "C" { data.files.array[0].range.start = 1; data.files.array[0].range.stop = 0; - if (main->parameters.remaining.used || main->process_pipe) { + if (main->parameters.remaining.used || (main->pipe & fll_program_data_pipe_input_e)) { { const f_array_length_t parameter_code[] = { fss_extended_list_read_parameter_at_e, @@ -503,7 +476,7 @@ extern "C" { } // for } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -571,7 +544,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -598,7 +571,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -619,7 +592,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/fss_extended_list_read/c/fss_extended_list_read.h b/level_3/fss_extended_list_read/c/fss_extended_list_read.h index 8b30ff138..847c84596 100644 --- a/level_3/fss_extended_list_read/c/fss_extended_list_read.h +++ b/level_3/fss_extended_list_read/c/fss_extended_list_read.h @@ -91,7 +91,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_extended_list_read_main_ - extern f_status_t fss_extended_list_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_extended_list_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_extended_list_read_main_ #ifdef __cplusplus diff --git a/level_3/fss_extended_list_read/c/main.c b/level_3/fss_extended_list_read/c/main.c index fa5f77e71..30e46c990 100644 --- a/level_3/fss_extended_list_read/c/main.c +++ b/level_3/fss_extended_list_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_extended_list_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_extended_list_read_main(&data, &arguments); + const f_status_t status = fss_extended_list_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_extended_list_read/data/build/settings b/level_3/fss_extended_list_read/data/build/settings index ff6750213..683d0db2f 100644 --- a/level_3/fss_extended_list_read/data/build/settings +++ b/level_3/fss_extended_list_read/data/build/settings @@ -3,7 +3,7 @@ build_name fss_extended_list_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_extended_list_write/c/common.h b/level_3/fss_extended_list_write/c/common.h index c44b2430a..b80105eba 100644 --- a/level_3/fss_extended_list_write/c/common.h +++ b/level_3/fss_extended_list_write/c/common.h @@ -165,6 +165,8 @@ extern "C" { fss_extended_list_write_parameter_verbosity_verbose_e, fss_extended_list_write_parameter_verbosity_debug_e, fss_extended_list_write_parameter_version_e, + fss_extended_list_write_parameter_line_first_no_e, + fss_extended_list_write_parameter_line_last_no_e, fss_extended_list_write_parameter_file_e, fss_extended_list_write_parameter_content_e, @@ -179,28 +181,31 @@ extern "C" { #define fss_extended_list_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_file_s.string, fss_extended_list_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_content_s.string, fss_extended_list_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_double_s.string, fss_extended_list_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_ignore_s.string, fss_extended_list_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_object_s.string, fss_extended_list_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_partial_s.string, fss_extended_list_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_prepend_s.string, fss_extended_list_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_single_s.string, fss_extended_list_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_list_write_short_trim_s.string, fss_extended_list_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_file_s.string, fss_extended_list_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_content_s.string, fss_extended_list_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_double_s.string, fss_extended_list_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_ignore_s.string, fss_extended_list_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_object_s.string, fss_extended_list_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_partial_s.string, fss_extended_list_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_prepend_s.string, fss_extended_list_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_single_s.string, fss_extended_list_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_list_write_short_trim_s.string, fss_extended_list_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_extended_list_write_total_parameters_d 19 + #define fss_extended_list_write_total_parameters_d 21 #endif // _di_fss_extended_list_write_parameters_ /** diff --git a/level_3/fss_extended_list_write/c/fss_extended_list_write.c b/level_3/fss_extended_list_write/c/fss_extended_list_write.c index 460627593..a82340b2f 100644 --- a/level_3/fss_extended_list_write/c/fss_extended_list_write.c +++ b/level_3/fss_extended_list_write/c/fss_extended_list_write.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_extended_list_write_program_name_long_s, fss_extended_list_write_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -38,7 +33,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_extended_list_write_program_name_s, f_string_empty_s); - fl_print_format(" The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); + fl_print_format("%r The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, f_string_eol_s, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Form Feed character '%[\\f%]' (%[U+000C%]) to designate the end of the last Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Vertical Line character '%[\\v%]' (%[U+000B%]) is used to ignore a Content range (use this both before and after the range).%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" For the pipe, an Object is terminated by either a Backspace character '%[\\b%]' (%[U+0008%])", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable); @@ -52,8 +47,13 @@ extern "C" { fl_print_format(" This parameter requires two values.%r", file.stream, f_string_eol_s); fl_print_format(" This parameter is not used for ignoring anything from the input pipe.%r", file.stream, f_string_eol_s); fl_print_format(" This parameter must be specified after a '%[%r%r%]'", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable); - fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%r%]' parameter.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" parameter and this applies only to the Content represented by that specific '%[%r%r%]' parameter.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_list_write_long_content_s, context.set.notable, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -61,77 +61,50 @@ extern "C" { #endif // _di_fss_extended_list_write_print_help_ #ifndef _di_fss_extended_list_write_main_ - f_status_t fss_extended_list_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_extended_list_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_extended_list_write_parameter_no_color_e, fss_extended_list_write_parameter_light_e, fss_extended_list_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + setting->status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(setting->status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_extended_list_write_parameter_no_color_e, fss_extended_list_write_parameter_light_e, fss_extended_list_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_extended_list_write_parameter_verbosity_quiet_e, fss_extended_list_write_parameter_verbosity_error_e, fss_extended_list_write_parameter_verbosity_normal_e, fss_extended_list_write_parameter_verbosity_verbose_e, fss_extended_list_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_extended_list_write_parameter_verbosity_quiet_e, fss_extended_list_write_parameter_verbosity_error_e, fss_extended_list_write_parameter_verbosity_verbose_e, fss_extended_list_write_parameter_verbosity_debug_e, fss_extended_list_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_extended_list_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_extended_list_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_extended_list_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_extended_list_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_extended_list_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -269,7 +242,7 @@ extern "C" { } } } - else if (!main->process_pipe) { + else if (!(main->pipe & fll_program_data_pipe_input_e)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -285,7 +258,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_extended_list_write_parameter_partial_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -413,7 +386,7 @@ extern "C" { if (F_status_is_error_not(status)) { f_string_ranges_t ignore = f_string_ranges_t_initialize; - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { status = fss_extended_list_write_process_pipe(main, output, quote, &buffer, &ignore); if (F_status_is_error(status)) { @@ -519,7 +492,7 @@ extern "C" { } if (main->parameters.array[fss_extended_list_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&output); + f_file_stream_flush(output); f_file_stream_close(&output); } diff --git a/level_3/fss_extended_list_write/c/fss_extended_list_write.h b/level_3/fss_extended_list_write/c/fss_extended_list_write.h index 6baf360d8..ce18f5b60 100644 --- a/level_3/fss_extended_list_write/c/fss_extended_list_write.h +++ b/level_3/fss_extended_list_write/c/fss_extended_list_write.h @@ -84,7 +84,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_extended_list_write_main_ - extern f_status_t fss_extended_list_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_extended_list_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_extended_list_write_main_ #ifdef __cplusplus diff --git a/level_3/fss_extended_list_write/c/main.c b/level_3/fss_extended_list_write/c/main.c index 46280945b..6814f7d92 100644 --- a/level_3/fss_extended_list_write/c/main.c +++ b/level_3/fss_extended_list_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_extended_list_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_extended_list_write_main(&data, &arguments); + const f_status_t status = fss_extended_list_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_extended_list_write/data/build/settings b/level_3/fss_extended_list_write/data/build/settings index 95a8f80ee..c8ca91170 100644 --- a/level_3/fss_extended_list_write/data/build/settings +++ b/level_3/fss_extended_list_write/data/build/settings @@ -3,7 +3,7 @@ build_name fss_extended_list_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_extended_read/c/common.h b/level_3/fss_extended_read/c/common.h index 0a2aef11b..e4a38b608 100644 --- a/level_3/fss_extended_read/c/common.h +++ b/level_3/fss_extended_read/c/common.h @@ -195,6 +195,8 @@ extern "C" { fss_extended_read_parameter_verbosity_verbose_e, fss_extended_read_parameter_verbosity_debug_e, fss_extended_read_parameter_version_e, + fss_extended_read_parameter_line_first_no_e, + fss_extended_read_parameter_line_last_no_e, fss_extended_read_parameter_at_e, fss_extended_read_parameter_content_e, @@ -214,33 +216,35 @@ extern "C" { #define fss_extended_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_at_s.string, fss_extended_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_content_s.string, fss_extended_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_columns_s.string, fss_extended_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_delimit_s.string, fss_extended_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_depth_s.string, fss_extended_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_empty_s.string, fss_extended_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_line_s.string, fss_extended_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_name_s.string, fss_extended_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_object_s.string, fss_extended_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_pipe_s.string, fss_extended_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_original_s.string, fss_extended_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_select_s.string, fss_extended_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_total_s.string, fss_extended_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_read_short_trim_s.string, fss_extended_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_content_s.string, fss_extended_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_columns_s.string, fss_extended_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_delimit_s.string, fss_extended_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_depth_s.string, fss_extended_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_empty_s.string, fss_extended_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_line_s.string, fss_extended_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_name_s.string, fss_extended_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_object_s.string, fss_extended_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_pipe_s.string, fss_extended_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_original_s.string, fss_extended_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_select_s.string, fss_extended_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_total_s.string, fss_extended_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_read_short_trim_s.string, fss_extended_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_extended_read_total_parameters_d 24 + #define fss_extended_read_total_parameters_d 26 #endif // _di_fss_extended_read_parameters_ /** diff --git a/level_3/fss_extended_read/c/fss_extended_read.c b/level_3/fss_extended_read/c/fss_extended_read.c index 27d029af2..4226bb8ca 100644 --- a/level_3/fss_extended_read/c/fss_extended_read.c +++ b/level_3/fss_extended_read/c/fss_extended_read.c @@ -12,18 +12,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_extended_read_program_name_long_s, fss_extended_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -44,7 +39,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_extended_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will print the Content associated with the given Object and Content main based on the FSS-0001 Extended standard.%r%r", file.stream, f_string_eol_s, f_string_eol_s); @@ -110,8 +105,13 @@ extern "C" { fl_print_format(" and %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_read_long_select_s, context.set.notable); fl_print_format(" refer to a Content column.%r", file.stream, f_string_eol_s); fl_print_format(" The word \"column\" is being loosely defined to refer to a specific Content.%r", file.stream, f_string_eol_s); - fl_print_format(" This is not to be confused with a depth.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This is not to be confused with a depth.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -119,77 +119,50 @@ extern "C" { #endif // _di_fss_extended_read_print_help_ #ifndef _di_fss_extended_read_main_ - f_status_t fss_extended_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_extended_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_extended_read_parameter_no_color_e, fss_extended_read_parameter_light_e, fss_extended_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_extended_read_parameter_no_color_e, fss_extended_read_parameter_light_e, fss_extended_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_extended_read_parameter_verbosity_quiet_e, fss_extended_read_parameter_verbosity_error_e, fss_extended_read_parameter_verbosity_normal_e, fss_extended_read_parameter_verbosity_verbose_e, fss_extended_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_extended_read_parameter_verbosity_quiet_e, fss_extended_read_parameter_verbosity_error_e, fss_extended_read_parameter_verbosity_verbose_e, fss_extended_read_parameter_verbosity_debug_e, fss_extended_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_extended_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_extended_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_extended_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_extended_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_extended_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -219,7 +192,7 @@ extern "C" { data.files.array[0].range.start = 1; data.files.array[0].range.stop = 0; - if (main->parameters.remaining.used || main->process_pipe) { + if (main->parameters.remaining.used || (main->pipe & fll_program_data_pipe_input_e)) { { const f_array_length_t parameter_code[] = { fss_extended_read_parameter_at_e, @@ -502,7 +475,7 @@ extern "C" { } // for } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -570,7 +543,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -597,7 +570,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -618,7 +591,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/fss_extended_read/c/fss_extended_read.h b/level_3/fss_extended_read/c/fss_extended_read.h index 1a7c65705..bbdd1bf07 100644 --- a/level_3/fss_extended_read/c/fss_extended_read.h +++ b/level_3/fss_extended_read/c/fss_extended_read.h @@ -91,7 +91,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_extended_read_main_ - extern f_status_t fss_extended_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_extended_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_extended_read_main_ #ifdef __cplusplus diff --git a/level_3/fss_extended_read/c/main.c b/level_3/fss_extended_read/c/main.c index ca654302d..95d7a453c 100644 --- a/level_3/fss_extended_read/c/main.c +++ b/level_3/fss_extended_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_extended_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_extended_read_main(&data, &arguments); + const f_status_t status = fss_extended_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_extended_read/data/build/settings b/level_3/fss_extended_read/data/build/settings index dd87c4805..7b6720a89 100644 --- a/level_3/fss_extended_read/data/build/settings +++ b/level_3/fss_extended_read/data/build/settings @@ -3,7 +3,7 @@ build_name fss_extended_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_extended_write/c/common.h b/level_3/fss_extended_write/c/common.h index 4e3b7b9b8..3ba6427db 100644 --- a/level_3/fss_extended_write/c/common.h +++ b/level_3/fss_extended_write/c/common.h @@ -165,6 +165,8 @@ extern "C" { fss_extended_write_parameter_verbosity_verbose_e, fss_extended_write_parameter_verbosity_debug_e, fss_extended_write_parameter_version_e, + fss_extended_write_parameter_line_first_no_e, + fss_extended_write_parameter_line_last_no_e, fss_extended_write_parameter_file_e, fss_extended_write_parameter_content_e, @@ -179,28 +181,31 @@ extern "C" { #define fss_extended_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_file_s.string, fss_extended_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_content_s.string, fss_extended_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_double_s.string, fss_extended_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_ignore_s.string, fss_extended_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_object_s.string, fss_extended_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_partial_s.string, fss_extended_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_prepend_s.string, fss_extended_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_single_s.string, fss_extended_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_extended_write_short_trim_s.string, fss_extended_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_file_s.string, fss_extended_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_content_s.string, fss_extended_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_double_s.string, fss_extended_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_ignore_s.string, fss_extended_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_object_s.string, fss_extended_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_partial_s.string, fss_extended_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_prepend_s.string, fss_extended_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_single_s.string, fss_extended_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_extended_write_short_trim_s.string, fss_extended_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_extended_write_total_parameters_d 18 + #define fss_extended_write_total_parameters_d 20 #endif // _di_fss_extended_write_parameters_ #ifdef __cplusplus diff --git a/level_3/fss_extended_write/c/fss_extended_write.c b/level_3/fss_extended_write/c/fss_extended_write.c index 12f2f3068..9ecf12e97 100644 --- a/level_3/fss_extended_write/c/fss_extended_write.c +++ b/level_3/fss_extended_write/c/fss_extended_write.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_extended_write_program_name_long_s, fss_extended_write_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -38,7 +33,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_extended_write_program_name_s, f_string_empty_s); - fl_print_format(" The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); + fl_print_format("%r The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, f_string_eol_s, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Form Feed character '%[\\f%]' (%[U+000C%]) to designate the end of the last Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Vertical Line character '%[\\v%]' (%[U+000B%]) is used to ignore a Content range, which does nothing in this program.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" For the pipe, an Object is terminated by either a Backspace character '%[\\b%]' (%[U+0008%])", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable); @@ -49,8 +44,13 @@ extern "C" { fl_print_format(" does nothing.%r%r", file.stream, f_string_eol_s, f_string_eol_s); fl_print_format(" This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_extended_write_long_ignore_s, context.set.notable, f_string_eol_s); - fl_print_format(" This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This parameter requires two values.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -58,77 +58,50 @@ extern "C" { #endif // _di_fss_extended_write_print_help_ #ifndef _di_fss_extended_write_main_ - f_status_t fss_extended_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_extended_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_extended_write_parameter_no_color_e, fss_extended_write_parameter_light_e, fss_extended_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_extended_write_parameter_no_color_e, fss_extended_write_parameter_light_e, fss_extended_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_extended_write_parameter_verbosity_quiet_e, fss_extended_write_parameter_verbosity_error_e, fss_extended_write_parameter_verbosity_normal_e, fss_extended_write_parameter_verbosity_verbose_e, fss_extended_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_extended_write_parameter_verbosity_quiet_e, fss_extended_write_parameter_verbosity_error_e, fss_extended_write_parameter_verbosity_verbose_e, fss_extended_write_parameter_verbosity_debug_e, fss_extended_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_extended_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_extended_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_extended_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_extended_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_extended_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -280,7 +253,7 @@ extern "C" { } } } - else if (!main->process_pipe) { + else if (!(main->pipe & fll_program_data_pipe_input_e)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -296,7 +269,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_extended_write_parameter_partial_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -426,7 +399,7 @@ extern "C" { if (F_status_is_error_not(status)) { f_string_dynamic_t escaped = f_string_dynamic_t_initialize; - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { status = fss_extended_write_process_pipe(main, output, quote, &buffer); if (F_status_is_error(status)) { @@ -574,7 +547,7 @@ extern "C" { } if (main->parameters.array[fss_extended_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&output); + f_file_stream_flush(output); f_file_stream_close(&output); } diff --git a/level_3/fss_extended_write/c/fss_extended_write.h b/level_3/fss_extended_write/c/fss_extended_write.h index be78bb58e..b444dfd30 100644 --- a/level_3/fss_extended_write/c/fss_extended_write.h +++ b/level_3/fss_extended_write/c/fss_extended_write.h @@ -84,7 +84,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_extended_write_main_ - extern f_status_t fss_extended_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_extended_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_extended_write_main_ #ifdef __cplusplus diff --git a/level_3/fss_extended_write/c/main.c b/level_3/fss_extended_write/c/main.c index cd8acc425..48d1286f8 100644 --- a/level_3/fss_extended_write/c/main.c +++ b/level_3/fss_extended_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_extended_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_extended_write_main(&data, &arguments); + const f_status_t status = fss_extended_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_extended_write/data/build/settings b/level_3/fss_extended_write/data/build/settings index 4b11c00d4..151ed4004 100644 --- a/level_3/fss_extended_write/data/build/settings +++ b/level_3/fss_extended_write/data/build/settings @@ -3,7 +3,7 @@ build_name fss_extended_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_identify/c/common.h b/level_3/fss_identify/c/common.h index 0fac600bb..38764dd3a 100644 --- a/level_3/fss_identify/c/common.h +++ b/level_3/fss_identify/c/common.h @@ -117,6 +117,8 @@ extern "C" { fss_identify_parameter_verbosity_verbose_e, fss_identify_parameter_verbosity_debug_e, fss_identify_parameter_version_e, + fss_identify_parameter_line_first_no_e, + fss_identify_parameter_line_last_no_e, fss_identify_parameter_content_e, fss_identify_parameter_line_e, @@ -127,24 +129,27 @@ extern "C" { #define fss_identify_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_identify_short_content_s.string, fss_identify_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_identify_short_line_s.string, fss_identify_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_identify_short_name_s.string, fss_identify_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_identify_short_object_s.string, fss_identify_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_identify_short_total_s.string, fss_identify_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_identify_short_content_s.string, fss_identify_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_identify_short_line_s.string, fss_identify_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_identify_short_name_s.string, fss_identify_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_identify_short_object_s.string, fss_identify_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_identify_short_total_s.string, fss_identify_long_total_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_identify_total_parameters_d 15 + #define fss_identify_total_parameters_d 17 #endif // _di_fss_identify_parameters_ #ifdef __cplusplus diff --git a/level_3/fss_identify/c/fss_identify.c b/level_3/fss_identify/c/fss_identify.c index f2b1d2953..f42a1ffdf 100644 --- a/level_3/fss_identify/c/fss_identify.c +++ b/level_3/fss_identify/c/fss_identify.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_identify_program_name_long_s, fss_identify_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -37,7 +32,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_identify_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" The %[%r%r%] parameter refers to the file lines and not the lines in a given file.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_line_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format("%r The %[%r%r%] parameter refers to the file lines and not the lines in a given file.%r%r", file.stream, f_string_eol_s, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_line_s, context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" If neither the %[%r%r%] nor", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_object_s, context.set.notable); fl_print_format(" %[%r%r%] are specified, then the default behavior is to print both.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_identify_long_content_s, context.set.notable, f_string_eol_s, f_string_eol_s); @@ -50,8 +45,13 @@ extern "C" { fl_print_format(" where the Object, is a machine-name representing the name and may only consist of \"word\" characters and the Content is a 4-digit hexidecimal number representing a particular variant of the Object.%r", file.stream, f_string_eol_s); fl_print_format(" This identifier, if provided, must exist on the first line in a file and must begin with the pound character: '#'.%r", file.stream, f_string_eol_s); fl_print_format(" Whitespace must follow this pound character.%r", file.stream, f_string_eol_s); - fl_print_format(" There may be multiple Object and Content pairs, separated by white space, such as: \"# fss-0002 fss-0000 iki-0002\".%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" There may be multiple Object and Content pairs, separated by white space, such as: \"# fss-0002 fss-0000 iki-0002\".%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -59,84 +59,50 @@ extern "C" { #endif // _di_fss_identify_print_help_ #ifndef _di_fss_identify_main_ - f_status_t fss_identify_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_identify_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_identify_parameter_no_color_e, fss_identify_parameter_light_e, fss_identify_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); - - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_identify_parameter_no_color_e, fss_identify_parameter_light_e, fss_identify_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - fll_program_parameter_process_empty(&main->context, sets); - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - if (F_status_is_error(status)) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); - fll_print_dynamic_raw(f_string_eol_s, main->error.to.stream); + return; } - - return F_status_set_error(status); } - } - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_identify_parameter_verbosity_quiet_e, fss_identify_parameter_verbosity_error_e, fss_identify_parameter_verbosity_normal_e, fss_identify_parameter_verbosity_verbose_e, fss_identify_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_identify_parameter_verbosity_quiet_e, fss_identify_parameter_verbosity_error_e, fss_identify_parameter_verbosity_verbose_e, fss_identify_parameter_verbosity_debug_e, fss_identify_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_identify_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_identify_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_identify_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_identify_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_identify_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -271,7 +237,7 @@ extern "C" { f_string_dynamic_t buffer = f_string_dynamic_t_initialize; f_file_t file = f_file_t_initialize; - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { file.id = F_type_descriptor_input_d; file.stream = F_type_input_d; file.size_read = 512; @@ -319,7 +285,7 @@ extern "C" { } } - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) break; diff --git a/level_3/fss_identify/c/fss_identify.h b/level_3/fss_identify/c/fss_identify.h index 22e608fca..501d1576b 100644 --- a/level_3/fss_identify/c/fss_identify.h +++ b/level_3/fss_identify/c/fss_identify.h @@ -89,7 +89,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_identify_main_ - extern f_status_t fss_identify_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_identify_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_identify_main_ #ifdef __cplusplus diff --git a/level_3/fss_identify/c/main.c b/level_3/fss_identify/c/main.c index a8274e2d3..1b697b802 100644 --- a/level_3/fss_identify/c/main.c +++ b/level_3/fss_identify/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_identify_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_identify_main(&data, &arguments); + const f_status_t status = fss_identify_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_identify/data/build/settings b/level_3/fss_identify/data/build/settings index a6d120605..a016bd40f 100644 --- a/level_3/fss_identify/data/build/settings +++ b/level_3/fss_identify/data/build/settings @@ -3,7 +3,7 @@ build_name fss_identify version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_payload_read/c/common.h b/level_3/fss_payload_read/c/common.h index 6224e2659..186be3c4b 100644 --- a/level_3/fss_payload_read/c/common.h +++ b/level_3/fss_payload_read/c/common.h @@ -189,6 +189,8 @@ extern "C" { fss_payload_read_parameter_verbosity_verbose_e, fss_payload_read_parameter_verbosity_debug_e, fss_payload_read_parameter_version_e, + fss_payload_read_parameter_line_first_no_e, + fss_payload_read_parameter_line_last_no_e, fss_payload_read_parameter_at_e, fss_payload_read_parameter_content_e, @@ -208,33 +210,36 @@ extern "C" { #define fss_payload_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_at_s.string, fss_payload_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_content_s.string, fss_payload_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_columns_s.string, fss_payload_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_delimit_s.string, fss_payload_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_depth_s.string, fss_payload_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_empty_s.string, fss_payload_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_line_s.string, fss_payload_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_name_s.string, fss_payload_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_object_s.string, fss_payload_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_pipe_s.string, fss_payload_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_original_s.string, fss_payload_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_select_s.string, fss_payload_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_total_s.string, fss_payload_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_read_short_trim_s.string, fss_payload_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_at_s.string, fss_payload_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_content_s.string, fss_payload_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_columns_s.string, fss_payload_read_long_columns_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_delimit_s.string, fss_payload_read_long_delimit_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_depth_s.string, fss_payload_read_long_depth_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_empty_s.string, fss_payload_read_long_empty_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_line_s.string, fss_payload_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_name_s.string, fss_payload_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_object_s.string, fss_payload_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_pipe_s.string, fss_payload_read_long_pipe_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_original_s.string, fss_payload_read_long_original_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_select_s.string, fss_payload_read_long_select_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_total_s.string, fss_payload_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_read_short_trim_s.string, fss_payload_read_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_payload_read_total_parameters_d 24 + #define fss_payload_read_total_parameters_d 26 #endif // _di_fss_payload_read_parameters_ /** diff --git a/level_3/fss_payload_read/c/fss_payload_read.c b/level_3/fss_payload_read/c/fss_payload_read.c index c2a9e2162..01cfa0cf0 100644 --- a/level_3/fss_payload_read/c/fss_payload_read.c +++ b/level_3/fss_payload_read/c/fss_payload_read.c @@ -21,18 +21,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_payload_read_program_name_long_s, fss_payload_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -53,7 +48,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_payload_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will print the Content associated with the given Object and Content main based on the FSS-000E Payload standard.%r%r", file.stream, f_string_eol_s, f_string_eol_s); @@ -129,8 +124,13 @@ extern "C" { fl_print_format(" The Content of the explicit Object of", file.stream); fl_print_format(" '%[%r%]'", file.stream, context.set.notable, f_fss_string_payload_s, context.set.notable, f_string_eol_s); fl_print_format(" will not contain any Content close pipe control codes when using", file.stream); - fl_print_format(" %[%r%r%].%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_pipe_s, context.set.notable, f_string_eol_s, f_string_eol_s); + fl_print_format(" %[%r%r%].%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_read_long_pipe_s, context.set.notable, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -138,77 +138,50 @@ extern "C" { #endif // _di_fss_payload_read_print_help_ #ifndef _di_fss_payload_read_main_ - f_status_t fss_payload_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_payload_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_payload_read_parameter_no_color_e, fss_payload_read_parameter_light_e, fss_payload_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = { ids, 3 }; + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_payload_read_parameter_no_color_e, fss_payload_read_parameter_light_e, fss_payload_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_payload_read_parameter_verbosity_quiet_e, fss_payload_read_parameter_verbosity_error_e, fss_payload_read_parameter_verbosity_normal_e, fss_payload_read_parameter_verbosity_verbose_e, fss_payload_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_payload_read_parameter_verbosity_quiet_e, fss_payload_read_parameter_verbosity_error_e, fss_payload_read_parameter_verbosity_verbose_e, fss_payload_read_parameter_verbosity_debug_e, fss_payload_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_payload_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_payload_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_payload_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_payload_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_payload_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -238,7 +211,7 @@ extern "C" { data.files.array[0].range.start = 1; data.files.array[0].range.stop = 0; - if (main->parameters.remaining.used || main->process_pipe) { + if (main->parameters.remaining.used || (main->pipe & fll_program_data_pipe_input_e)) { { const f_array_length_t parameter_code[] = { fss_payload_read_parameter_at_e, @@ -534,7 +507,7 @@ extern "C" { } // for } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -602,7 +575,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_read_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -629,7 +602,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -650,7 +623,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/fss_payload_read/c/fss_payload_read.h b/level_3/fss_payload_read/c/fss_payload_read.h index c317d33b6..1aaca7ea4 100644 --- a/level_3/fss_payload_read/c/fss_payload_read.h +++ b/level_3/fss_payload_read/c/fss_payload_read.h @@ -92,7 +92,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_payload_read_main_ - extern f_status_t fss_payload_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_payload_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_payload_read_main_ #ifdef __cplusplus diff --git a/level_3/fss_payload_read/c/main.c b/level_3/fss_payload_read/c/main.c index b908e0e6d..c4e4387a7 100644 --- a/level_3/fss_payload_read/c/main.c +++ b/level_3/fss_payload_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_payload_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_payload_read_main(&data, &arguments); + const f_status_t status = fss_payload_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_payload_read/data/build/settings b/level_3/fss_payload_read/data/build/settings index b0e12b9ed..cb89eb06f 100644 --- a/level_3/fss_payload_read/data/build/settings +++ b/level_3/fss_payload_read/data/build/settings @@ -3,7 +3,7 @@ build_name fss_payload_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_payload_write/c/common.h b/level_3/fss_payload_write/c/common.h index f54758592..5f8126f95 100644 --- a/level_3/fss_payload_write/c/common.h +++ b/level_3/fss_payload_write/c/common.h @@ -153,6 +153,8 @@ extern "C" { fss_payload_write_parameter_verbosity_verbose_e, fss_payload_write_parameter_verbosity_debug_e, fss_payload_write_parameter_version_e, + fss_payload_write_parameter_line_first_no_e, + fss_payload_write_parameter_line_last_no_e, fss_payload_write_parameter_file_e, fss_payload_write_parameter_content_e, @@ -167,28 +169,31 @@ extern "C" { #define fss_payload_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, F_false, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_file_s.string, fss_payload_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_content_s.string, fss_payload_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_double_s.string, fss_payload_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_ignore_s.string, fss_payload_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_object_s.string, fss_payload_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_partial_s.string, fss_payload_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_prepend_s.string, fss_payload_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_single_s.string, fss_payload_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_payload_write_short_trim_s.string, fss_payload_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_file_s.string, fss_payload_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_content_s.string, fss_payload_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_double_s.string, fss_payload_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_ignore_s.string, fss_payload_write_long_ignore_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_object_s.string, fss_payload_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_partial_s.string, fss_payload_write_long_partial_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_prepend_s.string, fss_payload_write_long_prepend_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_single_s.string, fss_payload_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_payload_write_short_trim_s.string, fss_payload_write_long_trim_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_payload_write_total_parameters_d 19 + #define fss_payload_write_total_parameters_d 21 #endif // _di_fss_payload_write_parameters_ #ifdef __cplusplus diff --git a/level_3/fss_payload_write/c/fss_payload_write.c b/level_3/fss_payload_write/c/fss_payload_write.c index 1534628ed..1cc34ec24 100644 --- a/level_3/fss_payload_write/c/fss_payload_write.c +++ b/level_3/fss_payload_write/c/fss_payload_write.c @@ -20,18 +20,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_payload_write_program_name_long_s, fss_payload_write_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -47,7 +42,7 @@ extern "C" { fll_program_print_help_usage(file, context, fss_payload_write_program_name_s, f_string_empty_s); - fl_print_format(" The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); + fl_print_format("%r The pipe uses the Backspace character '%[\\b%]' (%[U+0008%]) to designate the start of a Content.%r", file.stream, f_string_eol_s, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Form Feed character '%[\\f%]' (%[U+000C%]) to designate the end of the last Content.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" The pipe uses the Vertical Line character '%[\\v%]' (%[U+000B%]) is used to ignore a Content range, which does nothing in this program.%r", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" For the pipe, an Object is terminated by either a Backspace character '%[\\b%]' (%[U+0008%])", file.stream, context.set.notable, context.set.notable, context.set.notable, context.set.notable); @@ -58,8 +53,13 @@ extern "C" { fl_print_format(" and '%[%r%r%]' do nothing.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_double_s, context.set.notable, f_string_eol_s, f_string_eol_s); fl_print_format(" This program does not use the parameter '%[%r%r%]', which therefore does nothing.%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, fss_payload_write_long_ignore_s, context.set.notable, f_string_eol_s); - fl_print_format(" This parameter requires two values.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" This parameter requires two values.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -67,77 +67,50 @@ extern "C" { #endif // _di_fss_payload_write_print_help_ #ifndef _di_fss_payload_write_main_ - f_status_t fss_payload_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_payload_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_payload_write_parameter_no_color_e, fss_payload_write_parameter_light_e, fss_payload_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + setting->status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(setting->status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_payload_write_parameter_no_color_e, fss_payload_write_parameter_light_e, fss_payload_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } - - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_payload_write_parameter_verbosity_quiet_e, fss_payload_write_parameter_verbosity_error_e, fss_payload_write_parameter_verbosity_normal_e, fss_payload_write_parameter_verbosity_verbose_e, fss_payload_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_payload_write_parameter_verbosity_quiet_e, fss_payload_write_parameter_verbosity_error_e, fss_payload_write_parameter_verbosity_verbose_e, fss_payload_write_parameter_verbosity_debug_e, fss_payload_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == fss_payload_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_payload_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_payload_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_payload_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_payload_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -277,7 +250,7 @@ extern "C" { } } } - else if (!main->process_pipe) { + else if (!(main->pipe & fll_program_data_pipe_input_e)) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -293,7 +266,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && main->process_pipe) { + if (F_status_is_error_not(status) && (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[fss_payload_write_parameter_partial_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -420,7 +393,7 @@ extern "C" { if (F_status_is_error_not(status)) { f_string_dynamic_t escaped = f_string_dynamic_t_initialize; - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { status = fss_payload_write_process_pipe(main, output, quote, &buffer); if (F_status_is_error(status)) { @@ -518,7 +491,7 @@ extern "C" { } if (main->parameters.array[fss_payload_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&output); + f_file_stream_flush(output); f_file_stream_close(&output); } diff --git a/level_3/fss_payload_write/c/fss_payload_write.h b/level_3/fss_payload_write/c/fss_payload_write.h index b7fecdd0e..da56d8166 100644 --- a/level_3/fss_payload_write/c/fss_payload_write.h +++ b/level_3/fss_payload_write/c/fss_payload_write.h @@ -84,7 +84,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_payload_write_main_ - extern f_status_t fss_payload_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_payload_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_payload_write_main_ #ifdef __cplusplus diff --git a/level_3/fss_payload_write/c/main.c b/level_3/fss_payload_write/c/main.c index 56c7ca2d1..5a9452cf1 100644 --- a/level_3/fss_payload_write/c/main.c +++ b/level_3/fss_payload_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_payload_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_payload_write_main(&data, &arguments); + const f_status_t status = fss_payload_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/fss_payload_write/data/build/settings b/level_3/fss_payload_write/data/build/settings index 095c0a2c6..84c0b5ae1 100644 --- a/level_3/fss_payload_write/data/build/settings +++ b/level_3/fss_payload_write/data/build/settings @@ -3,7 +3,7 @@ build_name fss_payload_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/fss_status_code/c/common.h b/level_3/fss_status_code/c/common.h index dd90b5bc7..5f531b766 100644 --- a/level_3/fss_status_code/c/common.h +++ b/level_3/fss_status_code/c/common.h @@ -121,6 +121,8 @@ extern "C" { fss_status_code_parameter_verbosity_verbose_e, fss_status_code_parameter_verbosity_debug_e, fss_status_code_parameter_version_e, + fss_status_code_parameter_line_first_no_e, + fss_status_code_parameter_line_last_no_e, fss_status_code_parameter_fine_e, fss_status_code_parameter_warning_e, @@ -130,23 +132,26 @@ extern "C" { #define fss_status_code_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(fss_status_code_short_fine_s.string, fss_status_code_long_fine_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_status_code_short_warning_s.string, fss_status_code_long_warning_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_status_code_short_error_s.string, fss_status_code_long_error_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(fss_status_code_short_number_s.string, fss_status_code_long_number_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(fss_status_code_short_fine_s.string, fss_status_code_long_fine_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_status_code_short_warning_s.string, fss_status_code_long_warning_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_status_code_short_error_s.string, fss_status_code_long_error_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(fss_status_code_short_number_s.string, fss_status_code_long_number_s.string, 0, 0, f_console_type_normal_e), \ } - #define fss_status_code_total_parameters_d 14 + #define fss_status_code_total_parameters_d 16 #endif // _di_fss_status_code_defines_ #ifdef __cplusplus diff --git a/level_3/fss_status_code/c/fss_status_code.c b/level_3/fss_status_code/c/fss_status_code.c index a880d7aea..c84f07c1c 100644 --- a/level_3/fss_status_code/c/fss_status_code.c +++ b/level_3/fss_status_code/c/fss_status_code.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, fss_status_code_program_name_long_s, fss_status_code_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -33,6 +28,11 @@ extern "C" { fll_program_print_help_usage(file, context, fss_status_code_program_name_s, fss_status_code_program_help_parameters_s); + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -40,77 +40,50 @@ extern "C" { #endif // _di_fss_status_code_print_help_ #ifndef _di_fss_status_code_main_ - f_status_t fss_status_code_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t fss_status_code_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { fss_status_code_parameter_no_color_e, fss_status_code_parameter_light_e, fss_status_code_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { fss_status_code_parameter_no_color_e, fss_status_code_parameter_light_e, fss_status_code_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { fss_status_code_parameter_verbosity_quiet_e, fss_status_code_parameter_verbosity_error_e, fss_status_code_parameter_verbosity_verbose_e, fss_status_code_parameter_verbosity_debug_e, fss_status_code_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { fss_status_code_parameter_verbosity_quiet_e, fss_status_code_parameter_verbosity_error_e, fss_status_code_parameter_verbosity_normal_e, fss_status_code_parameter_verbosity_verbose_e, fss_status_code_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - return status; - } - - if (choice == fss_status_code_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == fss_status_code_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == fss_status_code_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == fss_status_code_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == fss_status_code_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -169,7 +142,7 @@ extern "C" { return F_status_set_error(status); } - if (main->parameters.remaining.used == 0 && !main->process_pipe) { + if (main->parameters.remaining.used == 0 && !(main->pipe & fll_program_data_pipe_input_e)) { fll_print_format("%[You failed to specify an error code.%]%r", main->error.to.stream, main->error.context, main->error.context, f_string_eol_s); return F_status_set_error(F_parameter); @@ -178,7 +151,7 @@ extern "C" { f_status_t status2 = F_none; if (main->parameters.array[fss_status_code_parameter_number_e].result == f_console_result_found_e) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { // @todo call fss_status_code_process_number() here for all main from pipe that is space separated. } @@ -210,7 +183,7 @@ extern "C" { } } else if (main->parameters.array[fss_status_code_parameter_error_e].result == f_console_result_found_e || main->parameters.array[fss_status_code_parameter_warning_e].result == f_console_result_found_e || main->parameters.array[fss_status_code_parameter_fine_e].result == f_console_result_found_e) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { // @todo call fss_status_code_process_check() here for all main from pipe that is space separated. } @@ -242,7 +215,7 @@ extern "C" { } } else { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { // @todo call fss_status_code_process_normal() here for all main from pipe that is space separated. } diff --git a/level_3/fss_status_code/c/fss_status_code.h b/level_3/fss_status_code/c/fss_status_code.h index dc6f69eaf..be8a2ce41 100644 --- a/level_3/fss_status_code/c/fss_status_code.h +++ b/level_3/fss_status_code/c/fss_status_code.h @@ -86,7 +86,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_fss_status_code_main_ - extern f_status_t fss_status_code_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t fss_status_code_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_fss_status_code_main_ #ifdef __cplusplus diff --git a/level_3/fss_status_code/c/main.c b/level_3/fss_status_code/c/main.c index 387dd2731..3cff8f689 100644 --- a/level_3/fss_status_code/c/main.c +++ b/level_3/fss_status_code/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = fss_status_code_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = fss_status_code_main(&data, &arguments); + const f_status_t status = fss_status_code_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status) || status == F_false) return 1; diff --git a/level_3/fss_status_code/data/build/settings b/level_3/fss_status_code/data/build/settings index c67be3706..703e58072 100644 --- a/level_3/fss_status_code/data/build/settings +++ b/level_3/fss_status_code/data/build/settings @@ -3,7 +3,7 @@ build_name fss_status_code version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/iki_read/c/common.h b/level_3/iki_read/c/common.h index b5b5a4c2f..945aa8bd8 100644 --- a/level_3/iki_read/c/common.h +++ b/level_3/iki_read/c/common.h @@ -160,6 +160,8 @@ extern "C" { iki_read_parameter_verbosity_verbose_e, iki_read_parameter_verbosity_debug_e, iki_read_parameter_version_e, + iki_read_parameter_line_first_no_e, + iki_read_parameter_line_last_no_e, iki_read_parameter_at_e, iki_read_parameter_content_e, @@ -176,30 +178,34 @@ extern "C" { #define iki_read_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_at_s.string, iki_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_content_s.string, iki_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_line_s.string, iki_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_literal_s.string, iki_read_long_literal_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_name_s.string, iki_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_object_s.string, iki_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_replace_s.string, iki_read_long_replace_s.string, 0, 2, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_substitute_s.string, iki_read_long_substitute_s.string, 0, 3, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_total_s.string, iki_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_whole_s.string, iki_read_long_whole_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_read_short_wrap_s.string, iki_read_long_wrap_s.string, 0, 3, f_console_type_normal_e), \ + mac + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(iki_read_short_at_s.string, iki_read_long_at_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_content_s.string, iki_read_long_content_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_line_s.string, iki_read_long_line_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_literal_s.string, iki_read_long_literal_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_name_s.string, iki_read_long_name_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_object_s.string, iki_read_long_object_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_replace_s.string, iki_read_long_replace_s.string, 0, 2, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_substitute_s.string, iki_read_long_substitute_s.string, 0, 3, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_total_s.string, iki_read_long_total_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_whole_s.string, iki_read_long_whole_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_read_short_wrap_s.string, iki_read_long_wrap_s.string, 0, 3, f_console_type_normal_e), \ } - #define iki_read_total_parameters_d 21 + #define iki_read_total_parameters_d 23 #endif // _di_iki_read_parameters_ #ifndef _di_iki_read_substitution_t_ diff --git a/level_3/iki_read/c/iki_read.c b/level_3/iki_read/c/iki_read.c index ad8981c51..927eea770 100644 --- a/level_3/iki_read/c/iki_read.c +++ b/level_3/iki_read/c/iki_read.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, iki_read_program_name_long_s, iki_read_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -46,7 +41,7 @@ extern "C" { fll_program_print_help_usage(file, context, iki_read_program_name_s, fll_program_parameter_filenames_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will find and print variables, vocabularies, or content following the IKI standard, without focusing on any particular vocabulary specification.%r%r", file.stream, f_string_eol_s, f_string_eol_s); fl_print_format(" The %[%r%r%] option requires 2 additional parameters:", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_replace_s, context.set.notable); @@ -91,8 +86,13 @@ extern "C" { fl_print_format(" The %[%r%r%]", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_wrap_s, context.set.notable); fl_print_format(" option is ignored when the %[%r%r%] option is matching the same variable.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, iki_read_long_substitute_s, context.set.notable, f_string_eol_s, f_string_eol_s); - fl_print_format(" The default behavior is to only display content portion of the IKI variable.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" The default behavior is to only display content portion of the IKI variable.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -100,85 +100,50 @@ extern "C" { #endif // _di_iki_read_print_help_ #ifndef _di_iki_read_main_ - f_status_t iki_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t iki_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { iki_read_parameter_no_color_e, iki_read_parameter_light_e, iki_read_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); - - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); - - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { iki_read_parameter_no_color_e, iki_read_parameter_light_e, iki_read_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - fll_program_parameter_process_empty(&main->context, sets); - } + status = fll_program_parameter_process_context(choices, modes, F_true, main); - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - if (main->error.verbosity == f_console_verbosity_verbose_e) { - fll_print_dynamic_raw(f_string_eol_s, main->error.to.stream); + return; } - - return F_status_set_error(status); } - } - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { iki_read_parameter_verbosity_quiet_e, iki_read_parameter_verbosity_error_e, iki_read_parameter_verbosity_normal_e, iki_read_parameter_verbosity_verbose_e, iki_read_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { iki_read_parameter_verbosity_quiet_e, iki_read_parameter_verbosity_error_e, iki_read_parameter_verbosity_verbose_e, iki_read_parameter_verbosity_debug_e, iki_read_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == iki_read_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == iki_read_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == iki_read_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == iki_read_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == iki_read_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -204,7 +169,7 @@ extern "C" { return F_none; } - if (main->parameters.remaining.used > 0 || main->process_pipe) { + if (main->parameters.remaining.used > 0 || (main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[iki_read_parameter_at_e].result == f_console_result_found_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -408,7 +373,7 @@ extern "C" { return F_status_set_error(F_parameter); } - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { f_file_t file = f_file_t_initialize; file.id = F_type_descriptor_input_d; @@ -464,7 +429,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_file_size_by_id", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -472,7 +437,7 @@ extern "C" { // Skip past empty files. if (!size_file) { - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); continue; @@ -494,7 +459,7 @@ extern "C" { if (F_status_is_error(status)) { fll_error_file_print(main->error, F_status_set_fine(status), "f_string_dynamic_resize", F_true, data.argv[main->parameters.remaining.array[i]], f_file_operation_process_s, fll_error_file_type_file_e); - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); break; @@ -515,7 +480,7 @@ extern "C" { if (F_status_is_error(status)) break; } // for - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); if (F_status_is_error(status)) { diff --git a/level_3/iki_read/c/iki_read.h b/level_3/iki_read/c/iki_read.h index af94894a3..79d0f5f38 100644 --- a/level_3/iki_read/c/iki_read.h +++ b/level_3/iki_read/c/iki_read.h @@ -94,7 +94,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_iki_read_main_ - extern f_status_t iki_read_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t iki_read_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_iki_read_main_ #ifdef __cplusplus diff --git a/level_3/iki_read/c/main.c b/level_3/iki_read/c/main.c index edff724b6..56ed1be02 100644 --- a/level_3/iki_read/c/main.c +++ b/level_3/iki_read/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = iki_read_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = iki_read_main(&data, &arguments); + const f_status_t status = iki_read_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/iki_read/data/build/settings b/level_3/iki_read/data/build/settings index 5c82ebe44..f3e93fd09 100644 --- a/level_3/iki_read/data/build/settings +++ b/level_3/iki_read/data/build/settings @@ -3,7 +3,7 @@ build_name iki_read version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/iki_write/c/common.h b/level_3/iki_write/c/common.h index 8ee5b1041..c2562cecf 100644 --- a/level_3/iki_write/c/common.h +++ b/level_3/iki_write/c/common.h @@ -117,6 +117,8 @@ extern "C" { iki_write_parameter_verbosity_verbose_e, iki_write_parameter_verbosity_debug_e, iki_write_parameter_version_e, + iki_write_parameter_line_first_no_e, + iki_write_parameter_line_last_no_e, iki_write_parameter_file_e, iki_write_parameter_content_e, @@ -127,24 +129,27 @@ extern "C" { #define iki_write_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(iki_write_short_file_s.string, iki_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_write_short_content_s.string, iki_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_write_short_double_s.string, iki_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_write_short_object_s.string, iki_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(iki_write_short_single_s.string, iki_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(iki_write_short_file_s.string, iki_write_long_file_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_write_short_content_s.string, iki_write_long_content_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_write_short_double_s.string, iki_write_long_double_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_write_short_object_s.string, iki_write_long_object_s.string, 0, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(iki_write_short_single_s.string, iki_write_long_single_s.string, 0, 0, f_console_type_normal_e), \ } - #define iki_write_total_parameters_d 15 + #define iki_write_total_parameters_d 17 #endif // _di_iki_write_parameters_ #ifdef __cplusplus diff --git a/level_3/iki_write/c/iki_write.c b/level_3/iki_write/c/iki_write.c index e50f74ded..2497a3cb5 100644 --- a/level_3/iki_write/c/iki_write.c +++ b/level_3/iki_write/c/iki_write.c @@ -11,6 +11,10 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, iki_write_program_name_long_s, iki_write_program_version_s); fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); @@ -34,14 +38,19 @@ extern "C" { fll_program_print_help_usage(file, context, iki_write_program_name_s, f_string_empty_s); - fl_print_format(" %[Notes:%]%r", file.stream, context.set.important, context.set.important, f_string_eol_s); + fl_print_format("%r %[Notes:%]%r", file.stream, f_string_eol_s, context.set.important, context.set.important, f_string_eol_s); fl_print_format(" This program will accept Object and Content strings to generate an IKI string, such as %[object:\"content\"%].%r", file.stream, context.set.notable, context.set.notable, f_string_eol_s); fl_print_format(" Each object must have a Content (and each Content must have an Object).%r%r", file.stream, f_string_eol_s, f_string_eol_s); fl_print_format(" When piping main to this program, a single form-feed character (\\f) must be used to separate each Object from each Content.%r", file.stream, f_string_eol_s); - fl_print_format(" Furthermore, each Object must be followed by a Content.%r%r", file.stream, f_string_eol_s, f_string_eol_s); + fl_print_format(" Furthermore, each Object must be followed by a Content.%r", file.stream, f_string_eol_s); + + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -49,84 +58,50 @@ extern "C" { #endif // _di_iki_write_print_help_ #ifndef _di_iki_write_main_ - f_status_t iki_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t iki_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { iki_write_parameter_no_color_e, iki_write_parameter_light_e, iki_write_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); - - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { iki_write_parameter_no_color_e, iki_write_parameter_light_e, iki_write_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - fll_program_parameter_process_empty(&main->context, sets); - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - if (F_status_is_error(status)) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); - f_print_dynamic_raw(f_string_eol_s, main->error.to.stream); + return; } - - return F_status_set_error(status); } - } - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { iki_write_parameter_verbosity_quiet_e, iki_write_parameter_verbosity_error_e, iki_write_parameter_verbosity_normal_e, iki_write_parameter_verbosity_verbose_e, iki_write_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { iki_write_parameter_verbosity_quiet_e, iki_write_parameter_verbosity_error_e, iki_write_parameter_verbosity_verbose_e, iki_write_parameter_verbosity_debug_e, iki_write_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - return status; - } + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - if (choice == iki_write_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == iki_write_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == iki_write_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == iki_write_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == iki_write_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -229,7 +204,7 @@ extern "C" { status = F_status_set_error(F_parameter); } - if (F_status_is_error_not(status) && !main->process_pipe) { + if (F_status_is_error_not(status) && !(main->pipe & fll_program_data_pipe_input_e)) { if (main->parameters.array[iki_write_parameter_object_e].result != f_console_result_additional_e && main->parameters.array[iki_write_parameter_content_e].result != f_console_result_additional_e) { if (main->error.verbosity != f_console_verbosity_quiet_e) { flockfile(main->error.to.stream); @@ -283,7 +258,7 @@ extern "C" { if (F_status_is_error_not(status)) { f_string_dynamic_t escaped = f_string_dynamic_t_initialize; - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { f_file_t pipe = f_file_t_initialize; pipe.id = F_type_descriptor_input_d; @@ -455,7 +430,7 @@ extern "C" { } if (main->parameters.array[iki_write_parameter_file_e].result == f_console_result_additional_e) { - f_file_stream_flush(&file); + f_file_stream_flush(file); f_file_stream_close(&file); } diff --git a/level_3/iki_write/c/iki_write.h b/level_3/iki_write/c/iki_write.h index d254f9231..58fab705b 100644 --- a/level_3/iki_write/c/iki_write.h +++ b/level_3/iki_write/c/iki_write.h @@ -94,7 +94,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_iki_write_main_ - extern f_status_t iki_write_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t iki_write_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_iki_write_main_ #ifdef __cplusplus diff --git a/level_3/iki_write/c/main.c b/level_3/iki_write/c/main.c index 4b140dcfa..f6b68d1fd 100644 --- a/level_3/iki_write/c/main.c +++ b/level_3/iki_write/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = iki_write_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = iki_write_main(&data, &arguments); + const f_status_t status = iki_write_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/iki_write/c/private-write.c b/level_3/iki_write/c/private-write.c index 28c197641..0cc2b77dd 100644 --- a/level_3/iki_write/c/private-write.c +++ b/level_3/iki_write/c/private-write.c @@ -54,7 +54,7 @@ extern "C" { return F_status_set_error(F_failure); } - fl_print_format("%Q%r%r%Q%r", output.stream, object, f_iki_syntax_separator_s, data->quote, *escaped, data->quote); + fl_print_format("%Q%r%r%Q%r", output, object, f_iki_syntax_separator_s, data->quote, *escaped, data->quote); return F_none; } diff --git a/level_3/iki_write/data/build/settings b/level_3/iki_write/data/build/settings index e47397593..4f280213e 100644 --- a/level_3/iki_write/data/build/settings +++ b/level_3/iki_write/data/build/settings @@ -3,7 +3,7 @@ build_name iki_write version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/status_code/c/common.h b/level_3/status_code/c/common.h index 09ab645ae..1d77a4b79 100644 --- a/level_3/status_code/c/common.h +++ b/level_3/status_code/c/common.h @@ -121,6 +121,8 @@ extern "C" { status_code_parameter_verbosity_verbose_e, status_code_parameter_verbosity_debug_e, status_code_parameter_version_e, + status_code_parameter_line_first_no_e, + status_code_parameter_line_last_no_e, status_code_parameter_fine_e, status_code_parameter_warning_e, @@ -130,23 +132,26 @@ extern "C" { #define status_code_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(status_code_short_fine_s.string, status_code_long_fine_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(status_code_short_warning_s.string, status_code_long_warning_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(status_code_short_error_s.string, status_code_long_error_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(status_code_short_number_s.string, status_code_long_number_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize2(status_code_short_fine_s.string, status_code_long_fine_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(status_code_short_warning_s.string, status_code_long_warning_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(status_code_short_error_s.string, status_code_long_error_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize2(status_code_short_number_s.string, status_code_long_number_s.string, 0, 0, f_console_type_normal_e), \ } - #define status_code_total_parameters_d 14 + #define status_code_total_parameters_d 16 #endif // _di_status_code_parameters_ #ifdef __cplusplus diff --git a/level_3/status_code/c/main.c b/level_3/status_code/c/main.c index 9326cb70d..98802168b 100644 --- a/level_3/status_code/c/main.c +++ b/level_3/status_code/c/main.c @@ -10,16 +10,16 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { data.parameters.used = status_code_total_parameters_d; if (f_pipe_input_exists()) { - data.process_pipe = F_true; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - const f_status_t status = status_code_main(&data, &arguments); + const f_status_t status = status_code_main(&data, arguments); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); if (F_status_is_error(status)) return 1; diff --git a/level_3/status_code/c/status_code.c b/level_3/status_code/c/status_code.c index 8c5ee203e..620d0e8d3 100644 --- a/level_3/status_code/c/status_code.c +++ b/level_3/status_code/c/status_code.c @@ -11,18 +11,13 @@ extern "C" { flockfile(file.stream); + //if (!(setting->flag & XXX_main_flag_line_first_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + fll_program_print_help_header(file, context, status_code_program_name_long_s, status_code_program_version_s); - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); + fll_program_print_help_option_standard(file, context); f_print_dynamic_raw(f_string_eol_s, file.stream); @@ -33,6 +28,11 @@ extern "C" { fll_program_print_help_usage(file, context, status_code_program_name_s, status_code_program_help_parameters_s); + //if (!(setting->flag & XXX_main_flag_line_last_no_e)) { + f_print_dynamic_raw(f_string_eol_s, file.stream); + //} + + f_file_stream_flush(file); funlockfile(file.stream); return F_none; @@ -40,77 +40,50 @@ extern "C" { #endif // _di_status_code_print_help_ #ifndef _di_status_code_main_ - f_status_t status_code_main(fll_program_data_t * const main, const f_console_arguments_t *arguments) { + f_status_t status_code_main(fll_program_data_t * const main, const f_console_arguments_t arguments) { f_status_t status = F_none; - { - f_console_parameter_id_t ids[3] = { status_code_parameter_no_color_e, status_code_parameter_light_e, status_code_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); + // Load parameters. + status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(status)) return; - status = fll_program_parameter_process(*arguments, &main->parameters, choices, F_true, &main->context); + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; - main->output.set = &main->context.set; - main->error.set = &main->context.set; - main->warning.set = &main->context.set; + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { status_code_parameter_no_color_e, status_code_parameter_light_e, status_code_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; - if (main->context.set.error.before) { - main->output.context = f_color_set_empty_s; - main->output.notable = main->context.set.notable; + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; - main->error.context = main->context.set.error; - main->error.notable = main->context.set.notable; + status = fll_program_parameter_process_context(choices, modes, F_true, main); - main->warning.context = main->context.set.warning; - main->warning.notable = main->context.set.notable; - } - else { - f_color_set_t *sets[] = { &main->output.context, &main->output.notable, &main->error.context, &main->error.notable, &main->warning.context, &main->warning.notable, 0 }; + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_context", F_true); - fll_program_parameter_process_empty(&main->context, sets); + return; + } } - if (F_status_is_error(status)) return status; - } + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { status_code_parameter_verbosity_quiet_e, status_code_parameter_verbosity_error_e, status_code_parameter_verbosity_verbose_e, status_code_parameter_verbosity_debug_e, status_code_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; - // Identify priority of verbosity related parameters. - { - f_console_parameter_id_t ids[5] = { status_code_parameter_verbosity_quiet_e, status_code_parameter_verbosity_error_e, status_code_parameter_verbosity_normal_e, status_code_parameter_verbosity_verbose_e, status_code_parameter_verbosity_debug_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); + if (F_status_is_error(status)) { + fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - return status; - } - - if (choice == status_code_parameter_verbosity_quiet_e) { - main->output.verbosity = f_console_verbosity_quiet_e; - main->error.verbosity = f_console_verbosity_quiet_e; - main->warning.verbosity = f_console_verbosity_quiet_e; - } - else if (choice == status_code_parameter_verbosity_error_e) { - main->output.verbosity = f_console_verbosity_error_e; - main->error.verbosity = f_console_verbosity_error_e; - main->warning.verbosity = f_console_verbosity_error_e; - } - else if (choice == status_code_parameter_verbosity_normal_e) { - main->output.verbosity = f_console_verbosity_normal_e; - main->error.verbosity = f_console_verbosity_normal_e; - main->warning.verbosity = f_console_verbosity_normal_e; - } - else if (choice == status_code_parameter_verbosity_verbose_e) { - main->output.verbosity = f_console_verbosity_verbose_e; - main->error.verbosity = f_console_verbosity_verbose_e; - main->warning.verbosity = f_console_verbosity_verbose_e; - } - else if (choice == status_code_parameter_verbosity_debug_e) { - main->output.verbosity = f_console_verbosity_debug_e; - main->error.verbosity = f_console_verbosity_debug_e; - main->warning.verbosity = f_console_verbosity_debug_e; + return; + } } } @@ -169,7 +142,7 @@ extern "C" { return F_status_set_error(status); } - if (main->parameters.remaining.used == 0 && !main->process_pipe) { + if (main->parameters.remaining.used == 0 && !(main->pipe & fll_program_data_pipe_input_e)) { fll_print_format("%[You failed to specify a status code.%]%r", main->error.to.stream, main->error.context, main->error.context, f_string_eol_s); return F_status_set_error(F_parameter); @@ -178,7 +151,7 @@ extern "C" { f_status_t status2 = F_none; if (main->parameters.array[status_code_parameter_number_e].result == f_console_result_found_e) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { // @todo call status_code_process_number() here for all main from pipe that is space separated. } @@ -210,7 +183,7 @@ extern "C" { } } else if (main->parameters.array[status_code_parameter_error_e].result == f_console_result_found_e || main->parameters.array[status_code_parameter_warning_e].result == f_console_result_found_e || main->parameters.array[status_code_parameter_fine_e].result == f_console_result_found_e) { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { // @todo call status_code_process_check() here for all main from pipe that is space separated. } @@ -242,7 +215,7 @@ extern "C" { } } else { - if (main->process_pipe) { + if (main->pipe & fll_program_data_pipe_input_e) { // @todo call status_code_process_normal() here for all main from pipe that is space separated. } diff --git a/level_3/status_code/c/status_code.h b/level_3/status_code/c/status_code.h index 59683f0e2..a03e99bd3 100644 --- a/level_3/status_code/c/status_code.h +++ b/level_3/status_code/c/status_code.h @@ -85,7 +85,7 @@ extern "C" { * Status codes (with error bit) are returned on any problem. */ #ifndef _di_status_code_main_ - extern f_status_t status_code_main(fll_program_data_t * const main, const f_console_arguments_t *arguments); + extern f_status_t status_code_main(fll_program_data_t * const main, const f_console_arguments_t arguments); #endif // _di_status_code_main_ #ifdef __cplusplus diff --git a/level_3/status_code/data/build/settings b/level_3/status_code/data/build/settings index 0cdbe79b0..2c0d018c0 100644 --- a/level_3/status_code/data/build/settings +++ b/level_3/status_code/data/build/settings @@ -3,7 +3,7 @@ build_name status_code version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor diff --git a/level_3/utf8/c/common.c b/level_3/utf8/c/common.c index bf06d6049..e106a7d38 100644 --- a/level_3/utf8/c/common.c +++ b/level_3/utf8/c/common.c @@ -71,6 +71,352 @@ extern "C" { const f_string_static_t utf8_long_to_width_s = macro_f_string_static_t_initialize(UTF8_long_to_width_s, 0, UTF8_long_to_width_s_length); #endif // _di_utf8_parameters_ +#ifndef _di_utf8_setting_delete_ + f_status_t utf8_setting_delete(utf8_setting_t * const setting) { + + f_string_dynamics_resize(0, &setting->path_files_from); + f_string_dynamics_resize(0, &setting->path_files_to); + + return F_none; + } +#endif // _di_utf8_setting_delete_ + +#ifndef _di_utf8_setting_load_ + void utf8_setting_load(const f_console_arguments_t arguments, fll_program_data_t * const main, utf8_setting_t * const setting) { + + // Load parameters. + setting->status = f_console_parameter_process(arguments, &main->parameters); + if (F_status_is_error(setting->status)) return; + + { + f_array_length_t choice = 0; + f_uint16s_t choices = f_uint16s_t_initialize; + + // Identify and prioritize "color context" parameters. + { + uint16_t choices_array[3] = { utf8_parameter_no_color_e, utf8_parameter_light_e, utf8_parameter_dark_e }; + choices.array = choices_array; + choices.used = 3; + + const uint8_t modes[3] = { f_color_mode_color_not_e, f_color_mode_light_e, f_color_mode_dark_e }; + + setting->status = fll_program_parameter_process_context(choices, modes, F_true, main); + + if (F_status_is_error(setting->status)) { + fll_error_print(main->error, F_status_set_fine(setting->status), "fll_program_parameter_process_context", F_true); + + return; + } + } + + if (main->parameters.array[utf8_parameter_line_first_no_e].result == f_console_result_found_e) { + setting->line_first = f_string_empty_s; + } + else { + setting->line_first = f_string_eol_s; + } + + if (main->parameters.array[utf8_parameter_line_last_no_e].result == f_console_result_found_e) { + setting->line_last = f_string_empty_s; + } + else { + setting->line_last = f_string_eol_s; + } + + // Identify and prioritize "verbosity" parameters. + { + uint16_t choices_array[5] = { utf8_parameter_verbosity_quiet_e, utf8_parameter_verbosity_error_e, utf8_parameter_verbosity_verbose_e, utf8_parameter_verbosity_debug_e, utf8_parameter_verbosity_normal_e }; + choices.array = choices_array; + choices.used = 5; + + const uint8_t verbosity[5] = { f_console_verbosity_quiet_e, f_console_verbosity_error_e, f_console_verbosity_verbose_e, f_console_verbosity_debug_e, f_console_verbosity_normal_e }; + + setting->status = fll_program_parameter_process_verbosity(choices, verbosity, F_true, main); + + if (F_status_is_error(setting->status)) { + fll_error_print(main->error, F_status_set_fine(setting->status), "fll_program_parameter_process_verbosity", F_true); + + return; + } + } + + if (main->parameters.array[utf8_parameter_help_e].result == f_console_result_found_e) { + setting->flag |= utf8_main_flag_help_e; + + return; + } + + if (main->parameters.array[utf8_parameter_version_e].result == f_console_result_found_e) { + setting->flag |= utf8_main_flag_version_e; + + return; + } + + // Identify and prioritize "from" mode parameters. + { + uint16_t choices_array[2] = { utf8_parameter_from_bytesequence_e, utf8_parameter_from_codepoint_e }; + choices.array = choices_array; + choices.used = 2; + + setting->status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + + if (F_status_is_error(setting->status)) { + fll_error_print(main->error, F_status_set_fine(setting->status), "f_console_parameter_prioritize_right", F_true); + + return; + } + + if (choices.array[choice] == utf8_parameter_from_bytesequence_e) { + if (setting->mode & utf8_mode_from_codepoint_e) { + setting->mode -= utf8_mode_from_codepoint_e; + } + + setting->mode |= utf8_mode_from_bytesequence_e; + } + else if (choices.array[choice] == utf8_parameter_from_codepoint_e) { + if (setting->mode & utf8_mode_from_bytesequence_e) { + setting->mode -= utf8_mode_from_bytesequence_e; + } + + setting->mode |= utf8_mode_from_codepoint_e; + } + } + + // Identify and prioritize "to" mode parameters. + { + uint16_t choices_array[4] = { utf8_parameter_to_bytesequence_e, utf8_parameter_to_codepoint_e, utf8_parameter_to_combining_e, utf8_parameter_to_width_e }; + choices.array = choices_array; + choices.used = 4; + choice = 1; + + setting->status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); + + if (F_status_is_error(setting->status)) { + fll_error_print(main->error, F_status_set_fine(setting->status), "f_console_parameter_prioritize_right", F_true); + + return; + } + + if (choices.array[choice] == utf8_parameter_to_bytesequence_e) { + if (setting->mode & utf8_mode_to_codepoint_e) { + setting->mode -= utf8_mode_to_codepoint_e; + } + + if (setting->mode & utf8_mode_to_combining_e) { + setting->mode -= utf8_mode_to_combining_e; + } + + if (setting->mode & utf8_mode_to_width_e) { + setting->mode -= utf8_mode_to_width_e; + } + + setting->mode |= utf8_mode_to_bytesequence_e; + } + else if (choices.array[choice] == utf8_parameter_to_codepoint_e) { + if (setting->mode & utf8_mode_to_bytesequence_e) { + setting->mode -= utf8_mode_to_bytesequence_e; + } + + if (setting->mode & utf8_mode_to_combining_e) { + setting->mode -= utf8_mode_to_combining_e; + } + + if (setting->mode & utf8_mode_to_width_e) { + setting->mode -= utf8_mode_to_width_e; + } + + setting->mode |= utf8_mode_to_codepoint_e; + } + else if (choices.array[choice] == utf8_parameter_to_combining_e) { + if (setting->mode & utf8_mode_to_bytesequence_e) { + setting->mode -= utf8_mode_to_bytesequence_e; + } + + if (setting->mode & utf8_mode_to_codepoint_e) { + setting->mode -= utf8_mode_to_codepoint_e; + } + + // --to_width may be specified with --to_combining. + if (main->parameters.array[utf8_parameter_to_width_e].result == f_console_result_found_e) { + setting->mode |= utf8_mode_to_width_e; + } + + setting->mode |= utf8_mode_to_combining_e; + } + else if (choices.array[choice] == utf8_parameter_to_width_e) { + if (setting->mode & utf8_mode_to_bytesequence_e) { + setting->mode -= utf8_mode_to_bytesequence_e; + } + + if (setting->mode & utf8_mode_to_codepoint_e) { + setting->mode -= utf8_mode_to_codepoint_e; + } + + // --to_width may be specified with --to_combining. + if (main->parameters.array[utf8_parameter_to_combining_e].result == f_console_result_found_e) { + setting->mode |= utf8_mode_to_combining_e; + } + + setting->mode |= utf8_mode_to_width_e; + } + } + } + + f_string_static_t * const args = main->parameters.arguments.array; + + if (main->parameters.array[utf8_parameter_to_file_e].result == f_console_result_additional_e) { + if (main->parameters.array[utf8_parameter_to_file_e].values.used > 1) { + utf8_print_error_parameter_file_to_too_many(main, setting); + + setting->status = F_status_set_error(F_parameter); + + return; + } + + if (args[main->parameters.array[utf8_parameter_to_file_e].values.array[0]].used) { + setting->path_files_to.used = 0; + + setting->status = f_string_dynamics_increase_by(1, &setting->path_files_to); + if (F_status_is_error(setting->status)) return; + + setting->path_files_to.array[setting->path_files_to.used].used = 0; + + setting->status = f_string_dynamic_append_nulless(main->parameters.arguments.array[main->parameters.array[utf8_parameter_to_file_e].values.array[0]], &setting->path_files_to.array[0]); + if (F_status_is_error(setting->status)) return; + + ++setting->path_files_to.used; + + setting->status = f_file_stream_open(args[main->parameters.array[utf8_parameter_to_file_e].values.array[0]], f_file_open_mode_append_s, &main->output.to); + + if (F_status_is_error(setting->status)) { + fll_error_file_print(main->error, F_status_set_fine(setting->status), "f_file_stream_open", F_true, args[main->parameters.array[utf8_parameter_to_file_e].values.array[0]], f_file_operation_open_s, fll_error_file_type_file_e); + + return; + } + + setting->flag |= utf8_main_flag_file_to_e; + } + else { + utf8_print_error_parameter_file_name_empty(main, setting, main->parameters.array[utf8_parameter_to_file_e].values.array[0]); + + setting->status = F_status_set_error(F_parameter); + + return; + } + } + else if (main->parameters.array[utf8_parameter_to_file_e].result == f_console_result_found_e) { + utf8_print_error_no_value(main, setting, utf8_long_to_file_s); + + setting->status = F_status_set_error(F_parameter); + + return; + } + else { + main->output.to = main->message.to; + + if (setting->flag & utf8_main_flag_file_to_e) { + setting->flag -= utf8_main_flag_file_to_e; + } + } + + if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_additional_e) { + setting->path_files_from.used = 0; + + setting->status = f_string_dynamics_increase_by(main->parameters.array[utf8_parameter_from_file_e].values.used, &setting->path_files_from); + if (F_status_is_error(setting->status)) return; + + setting->path_files_from.used = main->parameters.array[utf8_parameter_from_file_e].values.used; + + f_array_length_t i = 0; + f_array_length_t index = 0; + + for (; i < setting->path_files_from.used; ++i) { + + index = main->parameters.array[utf8_parameter_from_file_e].values.array[i]; + setting->path_files_from.array[i].used = 0; + + setting->status = f_string_dynamic_append_nulless(main->parameters.arguments.array[index], &setting->path_files_from.array[i]); + if (F_status_is_error(setting->status)) return; + + if (args[index].used) { + if (f_file_exists(args[index], F_true) != F_true) { + utf8_print_error_parameter_file_not_found(main, setting, F_true, args[index]); + + if (F_status_is_error_not(setting->status)) { + setting->status = F_status_set_error(F_file_found_not); + } + } + } + else { + utf8_print_error_parameter_file_name_empty(main, setting, index); + + if (F_status_is_error_not(setting->status)) { + setting->status = F_status_set_error(F_parameter); + } + } + } // for + + if (F_status_is_error(setting->status)) return; + + setting->flag |= utf8_main_flag_file_from_e; + } + else if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_found_e) { + utf8_print_error_no_value(main, setting, utf8_long_from_file_s); + + setting->status = F_status_set_error(F_parameter); + + return; + } + else { + if (setting->flag & utf8_main_flag_file_from_e) { + setting->flag -= utf8_main_flag_file_from_e; + } + } + + if (F_status_is_error(setting->status)) return; + + if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_none_e && !((main->pipe & fll_program_data_pipe_input_e) || main->parameters.remaining.used)) { + utf8_print_error_no_from(main, setting); + + setting->status = F_status_set_error(F_parameter); + } + + if (!(setting->mode & utf8_mode_to_bytesequence_e)) { + if (main->parameters.array[utf8_parameter_separate_e].result == f_console_result_found_e || main->parameters.array[utf8_parameter_headers_e].result == f_console_result_found_e) { + setting->prepend = utf8_string_prepend_padding_s; + setting->append = f_string_eol_s; + } + else { + setting->prepend = f_string_space_s; + } + } + + if (main->parameters.array[utf8_parameter_headers_e].result == f_console_result_found_e) { + setting->flag |= utf8_main_flag_header_e; + } + + if (main->parameters.array[utf8_parameter_separate_e].result == f_console_result_found_e) { + setting->flag |= utf8_main_flag_separate_e; + } + + if (main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) { + setting->flag |= utf8_main_flag_strip_invalid_e; + } + + setting->valid_not = main->message.set->error; + } +#endif // _di_utf8_setting_load_ + +#ifndef _di_utf8_setting_unload_ + f_status_t utf8_setting_unload(fll_program_data_t * const main, utf8_setting_t * const setting) { + + f_string_dynamic_resize(0, &setting->buffer); + f_string_dynamic_resize(0, &setting->text); + + return F_none; + } +#endif // _di_utf8_setting_unload_ + #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/utf8/c/common.h b/level_3/utf8/c/common.h index c7672dc82..66b55448a 100644 --- a/level_3/utf8/c/common.h +++ b/level_3/utf8/c/common.h @@ -248,6 +248,8 @@ extern "C" { utf8_parameter_verbosity_verbose_e, utf8_parameter_verbosity_debug_e, utf8_parameter_version_e, + utf8_parameter_line_first_no_e, + utf8_parameter_line_last_no_e, utf8_parameter_from_bytesequence_e, utf8_parameter_from_codepoint_e, @@ -268,31 +270,34 @@ extern "C" { #define utf8_console_parameter_t_initialize \ { \ - macro_f_console_parameter_t_initialize(f_console_standard_short_help_s.string, f_console_standard_long_help_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_light_s.string, f_console_standard_long_light_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_dark_s.string, f_console_standard_long_dark_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_no_color_s.string, f_console_standard_long_no_color_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_quiet_s.string, f_console_standard_long_quiet_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_error_s.string, f_console_standard_long_error_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_normal_s.string, f_console_standard_long_normal_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_verbose_s.string, f_console_standard_long_verbose_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_debug_s.string, f_console_standard_long_debug_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(f_console_standard_short_version_s.string, f_console_standard_long_version_s.string, 0, 0, f_console_type_inverse_e), \ - macro_f_console_parameter_t_initialize(utf8_short_from_bytesequence_s.string, utf8_long_from_bytesequence_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_from_codepoint_s.string, utf8_long_from_codepoint_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_from_file_s.string, utf8_long_from_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_headers_s.string, utf8_long_headers_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_separate_s.string, utf8_long_headers_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_strip_invalid_s.string, utf8_long_strip_invalid_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_to_bytesequence_s.string, utf8_long_to_bytesequence_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_to_codepoint_s.string, utf8_long_to_codepoint_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_to_combining_s.string, utf8_long_to_combining_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_to_file_s.string, utf8_long_to_file_s.string, 0, 1, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_to_width_s.string, utf8_long_to_width_s.string, 0, 0, f_console_type_normal_e), \ - macro_f_console_parameter_t_initialize(utf8_short_verify_s.string, utf8_long_verify_s.string, 0, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_help_s, f_console_standard_long_help_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_light_s, f_console_standard_long_light_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_dark_s, f_console_standard_long_dark_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_error_s, f_console_standard_long_error_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_normal_s, f_console_standard_long_normal_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_debug_s, f_console_standard_long_debug_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_version_s, f_console_standard_long_version_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_first_no_s, f_console_standard_long_line_first_no_s, 0, f_console_type_inverse_e), \ + macro_f_console_parameter_t_initialize4(f_console_standard_short_line_last_no_s, f_console_standard_long_line_last_no_s, 0, f_console_type_inverse_e), \ + \ + macro_f_console_parameter_t_initialize4(utf8_short_from_bytesequence_s, utf8_long_from_bytesequence_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_from_codepoint_s, utf8_long_from_codepoint_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_from_file_s, utf8_long_from_file_s, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_headers_s, utf8_long_headers_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_separate_s, utf8_long_separate_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_strip_invalid_s, utf8_long_strip_invalid_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_to_bytesequence_s, utf8_long_to_bytesequence_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_to_codepoint_s, utf8_long_to_codepoint_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_to_combining_s, utf8_long_to_combining_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_to_file_s, utf8_long_to_file_s, 1, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_to_width_s, utf8_long_to_width_s, 0, f_console_type_normal_e), \ + macro_f_console_parameter_t_initialize4(utf8_short_verify_s, utf8_long_verify_s, 0, f_console_type_normal_e), \ } - #define utf8_total_parameters_d 22 + #define utf8_total_parameters_d 24 #endif // _di_utf8_parameters_ /** @@ -315,14 +320,42 @@ extern "C" { enum { utf8_mode_none_e = 0x0, utf8_mode_from_bytesequence_e = 0x1, - utf8_mode_from_codepoint_d = 0x2, - utf8_mode_to_bytesequence_d = 0x4, - utf8_mode_to_codepoint_d = 0x8, - utf8_mode_to_combining_d = 0x10, - utf8_mode_to_width_d = 0x20, + utf8_mode_from_codepoint_e = 0x2, + utf8_mode_to_bytesequence_e = 0x4, + utf8_mode_to_codepoint_e = 0x8, + utf8_mode_to_combining_e = 0x10, + utf8_mode_to_width_e = 0x20, }; #endif // _di_utf8_modes_e_ +/** + * Flags used to represent flags passed to the main function. + * + * utf8_main_flag_*_e: + * - none: No modes in use. + * - file_from: Using a specified source file. + * - file_to: Using a specified destination file. + * - help: Print help. + * - header: Enable printing of headers. + * - separate: Enable printing of separators. + * - strip_invalid: Using strip invalid character mode. + * - verify: Using verify mode. + * - version: Print version. + */ +#ifndef _di_utf8_main_flag_e_ + enum { + utf8_main_flag_none_e = 0x0, + utf8_main_flag_file_from_e = 0x1, + utf8_main_flag_file_to_e = 0x2, + utf8_main_flag_header_e = 0x4, + utf8_main_flag_help_e = 0x8, + utf8_main_flag_separate_e = 0x10, + utf8_main_flag_strip_invalid_e = 0x20, + utf8_main_flag_verify_e = 0x40, + utf8_main_flag_version_e = 0x80, + }; +#endif // _di_utf8_main_flag_e_ + /** * The UTF-8 main program settings. * @@ -330,44 +363,131 @@ extern "C" { * These program settings are often processed from the program arguments (often called the command line arguments). * * mode: The input/output mode (see utf8_modes_e). + * flag: Flags passed to the main function. + * + * status: The main status code, generally used by the load settings and main functions. + * + * valid: Designate the output context set for valid characters. + * valid_not: Designate the output context set for invalid characters. + * + * append: A string to append. A value of NULL results in not appending. + * prepend: A string to prepend. A value of NULL results in not prepending. + * + * line_first: A string expected to represent either "\n" or NULL to allow for easy handling of when to print first new line or not. + * line_last: A string expected to represent either "\n" or NULL to allow for easy handling of when to print last new line or not. + * + * buffer: A buffer to use for printing output (generally for storing a block of input from an input file). + * text: A buffer for storing a series of characters for processing (generally for code point processing). + * + * path_files_from: An array of all "from" file paths for when the flag utf8_main_flag_file_from_e is set. + * path_files_to: An array of all "to" file paths for when the flag utf8_main_flag_file_to_e is set. */ -#ifndef _di_utf8_main_setting_t_ +#ifndef _di_utf8_setting_t_ typedef struct { uint8_t mode; - } utf8_main_setting_t; + uint16_t flag; - #define utf8_main_setting_t_initialize \ - { \ - utf8_mode_from_bytesequence_d | utf8_mode_to_codepoint_d, \ - } -#endif // _di_utf8_main_setting_t_ + f_status_t status; -/* f_color_set_t valid; f_color_set_t valid_not; f_string_static_t append; f_string_static_t prepend; + f_string_static_t line_first; + f_string_static_t line_last; + f_string_dynamic_t buffer; f_string_dynamic_t text; - } utf8_data_t; - #define utf8_data_t_initialize \ + f_string_dynamics_t path_files_from; + f_string_dynamics_t path_files_to; + } utf8_setting_t; + + #define utf8_setting_t_initialize \ { \ - 0, \ - 0, \ - 0, \ - f_file_t_initialize, \ - utf8_mode_from_bytesequence_d | utf8_mode_to_codepoint_d, \ + utf8_mode_from_bytesequence_e | utf8_mode_to_codepoint_e, \ + utf8_main_flag_none_e, \ + F_none, \ f_color_set_t_initialize, \ f_color_set_t_initialize, \ f_string_static_t_initialize, \ f_string_static_t_initialize, \ + f_string_eol_s, \ + f_string_eol_s, \ f_string_dynamic_t_initialize, \ f_string_dynamic_t_initialize, \ + f_string_dynamics_t_initialize, \ + f_string_dynamics_t_initialize, \ } - */ +#endif // _di_utf8_setting_t_ + +/** + * Delete the program main setting data. + * + * @param setting + * The program main setting data. + * This does not alter setting.status. + * + * Assumed to always be non-NULL. + * + * @return + * F_none on success. + */ +#ifndef _di_utf8_setting_delete_ + extern f_status_t utf8_setting_delete(utf8_setting_t * const setting); +#endif // _di_utf8_setting_delete_ + +/** + * Perform the standard program setting load process. + * + * This prints error messages as appropriate. + * + * @param arguments + * The parameters passed to the process (often referred to as command line arguments). + * @param main + * The main program data. + * + * Assumed to always be non-NULL. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * + * This alters setting.status: + * F_none on success. + * + * Errors (with error bit) from: f_console_parameter_process(). + * Errors (with error bit) from: fll_program_parameter_process_context(). + * + * @see f_console_parameter_process() + * @see fll_program_parameter_process_context() + */ +#ifndef _di_utf8_setting_load_ + extern void utf8_setting_load(const f_console_arguments_t arguments, fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_setting_load_ + +/** + * Perform the standard program setting unload process. + * + * @param main + * The main program data. + * + * Assumed to always be non-NULL. + * @param setting + * The main program settings. + * This does not alter setting.status. + * All buffers are deallocated. + * + * Assumed to always be non-NULL. + * + * @return + * F_none on success. + */ +#ifndef _di_utf8_setting_unload_ + extern f_status_t utf8_setting_unload(fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_setting_unload_ #ifdef __cplusplus } // extern "C" diff --git a/level_3/utf8/c/main.c b/level_3/utf8/c/main.c index 2f51d638d..ae3f2f32c 100644 --- a/level_3/utf8/c/main.c +++ b/level_3/utf8/c/main.c @@ -2,39 +2,35 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) { - const f_console_arguments_t arguments = macro_f_console_arguments_t_initialize(argc, argv, envp); - fll_program_data_t data = fll_program_data_t_initialize; - utf8_main_setting_t setting = utf8_main_setting_t_initialize; + utf8_setting_t setting = utf8_setting_t_initialize; f_console_parameter_t parameters[] = utf8_console_parameter_t_initialize; data.parameters.array = parameters; data.parameters.used = utf8_total_parameters_d; + data.environment = envp; if (f_pipe_input_exists()) { - data.pipe |= fll_program_data_pipe_input_e; + data.pipe = fll_program_data_pipe_input_e; } - fll_program_standard_set_up(&data.signal); + fll_program_standard_set_up(&data); - f_status_t status = utf8_main_setting_load(arguments, data, &setting); + { + const f_console_arguments_t arguments = macro_f_console_arguments_t_initialize(argc, argv, envp); - if (F_status_is_error_not(status)) { - status = utf8_main(&data, &setting); + utf8_setting_load(arguments, &data, &setting); } - if (data.message.stream != data.output.stream) { - f_file_stream_flush(&data->output); - f_file_stream_close(&data->output); - } + utf8_main(&data, &setting); - utf8_main_setting_unload(data, &setting); + utf8_setting_unload(&data, &setting); - utf8_main_setting_delete(&setting); + utf8_setting_delete(&setting); fll_program_data_delete(&data); - fll_program_standard_set_down(&data.signal); + fll_program_standard_set_down(&data); - return F_status_is_error(status) ? 1 : 0; + return F_status_is_error(setting.status) || setting.status == F_false ? 1 : 0; } diff --git a/level_3/utf8/c/print.c b/level_3/utf8/c/print.c new file mode 100644 index 000000000..f00e61693 --- /dev/null +++ b/level_3/utf8/c/print.c @@ -0,0 +1,547 @@ +#include "utf8.h" +#include "private-common.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _di_utf8_print_bytesequence_ + void utf8_print_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) { + + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, sequence, setting->append); + } +#endif // _di_utf8_print_bytesequence_ + +#ifndef _di_utf8_print_character_invalid_ + void utf8_print_character_invalid(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t invalid) { + + if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return; + if (!invalid.used) return; + + if ((setting->mode & utf8_mode_to_combining_e) || (setting->mode & utf8_mode_to_width_e)) { + utf8_print_combining_or_width(main, setting, invalid); + } + else if (setting->mode & utf8_mode_to_bytesequence_e) { + fl_print_format("%r%[%r%]%r", main->output.to.stream, setting->prepend, setting->valid_not, invalid, setting->valid_not, setting->append); + } + else if (setting->mode & utf8_mode_from_codepoint_e) { + fl_print_format("%r%[%Q%]%r", main->output.to.stream, setting->prepend, setting->valid_not, invalid, setting->valid_not, setting->append); + } + else { + fl_print_format("%r%[0x", main->output.to.stream, setting->prepend, setting->valid_not); + + for (uint8_t i = 0; i < invalid.used; ++i) { + fl_print_format("%02_uii", main->output.to.stream, (uint8_t) invalid.string[i]); + } // for + + fl_print_format("%]%r", main->output.to.stream, setting->valid_not, setting->append); + } + } +#endif // _di_utf8_print_character_invalid_ + +#ifndef _di_utf8_print_codepoint_ + void utf8_print_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const uint32_t codepoint) { + + if (codepoint < 0x10000) { + fl_print_format("%rU+%04_U%r", main->output.to.stream, setting->prepend, codepoint, setting->append); + } + else if (codepoint < 0x100000) { + fl_print_format("%rU+%05_U%r", main->output.to.stream, setting->prepend, codepoint, setting->append); + } + else { + fl_print_format("%rU+%06_U%r", main->output.to.stream, setting->prepend, codepoint, setting->append); + } + } +#endif // _di_utf8_print_codepoint_ + +#ifndef _di_utf8_print_combining_or_width_ + void utf8_print_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) { + + if (setting->mode & utf8_mode_to_combining_e) { + f_status_t status = f_utf_is_combining(sequence.string, sequence.used); + + if (status == F_true) { + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, utf8_string_combining_is_s, setting->append); + } + else if (status == F_false) { + status = f_utf_is_private(sequence.string, sequence.used); + + if (status == F_true) { + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, utf8_string_unknown_s, setting->append); + } + else if (setting->mode & utf8_mode_to_width_e) { + utf8_print_width(main, setting, sequence); + } + else { + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, utf8_string_combining_not_s, setting->append); + } + } + else { + utf8_print_error_combining_or_width(main, setting); + } + } + else if (setting->mode & utf8_mode_to_width_e) { + utf8_print_width(main, setting, sequence); + } + } +#endif // _di_utf8_print_combining_or_width_ + +#ifndef _di_utf8_print_error_combining_or_width_ + void utf8_print_error_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting) { + + if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return; + + fl_print_format("%r%[%r%]%r", main->output.to.stream, setting->prepend, setting->valid_not, utf8_string_unknown_s, setting->valid_not, setting->append); + } +#endif // _di_utf8_print_error_combining_or_width_ + +#ifndef _di_utf8_print_error_decode_ + void utf8_print_error_decode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const f_string_static_t invalid) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return; + + utf8_print_line_first(setting, main->error, F_false); + + fl_print_format("%[%QFailed to decode character code '%]", main->error.to.stream, main->context.set.error, main->error.prefix, main->context.set.error); + + if (invalid.used) { + fl_print_format("%[0x", main->error.to.stream, main->context.set.notable); + + for (uint8_t i = 0; i < invalid.used; ++i) { + fl_print_format("%02_uii", main->error.to.stream, (uint8_t) invalid.string[i]); + } // for + + fl_print_format("%]", main->error.to.stream, main->context.set.notable); + } + + if (F_status_set_fine(status) == F_utf_not) { + fl_print_format("%[', not a valid UTF-8 character sequence.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + } + else if (F_status_set_fine(status) == F_complete_not_utf) { + fl_print_format("%[', invalid UTF-8 (truncated).%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + } + else if (F_status_set_fine(status) == F_utf_fragment) { + fl_print_format("%[', invalid UTF-8 fragment.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + } + else { + fl_print_format("%[', error status code%] ", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + fl_print_format("%[%ui%]", main->error.to.stream, main->context.set.notable, F_status_set_fine(status), main->context.set.notable); + fl_print_format("%[.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + } + } +#endif // _di_utf8_print_error_decode_ + +#ifndef _di_utf8_print_error_encode_ + void utf8_print_error_encode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const uint32_t codepoint) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + + utf8_print_line_first(setting, main->error, F_false); + + fl_print_format("%[%QFailed to encode Unicode codepoint '%]", main->error.to.stream, main->context.set.error, main->error.prefix, main->context.set.error); + fl_print_format("%[U+%_U%]", main->error.to.stream, main->context.set.notable, codepoint, main->context.set.notable); + + if (F_status_set_fine(status) == F_utf_not) { + fl_print_format("%[', not a valid Unicode codepoint.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + } + else { + fl_print_format("%[', error status code%] ", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + fl_print_format("%[%ui%]", main->error.to.stream, main->context.set.notable, F_status_set_fine(status), main->context.set.notable); + fl_print_format("%[.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + } + } +#endif // _di_utf8_print_error_encode_ + +#ifndef _di_utf8_print_error_no_from_ + void utf8_print_error_no_from(fll_program_data_t * const main, utf8_setting_t * const setting) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + + utf8_print_line_first(setting, main->error, F_true); + + fll_print_format("%[%QNo from sources are specified, please pipe data, designate a file, or add parameters.%]%r", main->error.to.stream, main->error.context, main->error.prefix, main->error.context, f_string_eol_s); + } +#endif // _di_utf8_print_error_no_from_ + +#ifndef _di_utf8_print_error_no_value_ + void utf8_print_error_no_value(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t parameter) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + + flockfile(main->error.to.stream); + + utf8_print_line_first(setting, main->error, F_false); + + fl_print_format("%[%QThe parameter '%]", main->error.to.stream, main->context.set.error, main->error.prefix, main->context.set.error); + fl_print_format("%[%r%r%]", main->error.to.stream, main->context.set.notable, f_console_symbol_long_enable_s, parameter, main->context.set.notable); + fl_print_format("%[' is specified, but no value was given.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + + funlockfile(main->error.to.stream); + } +#endif // _di_utf8_print_error_no_value_ + +#ifndef _di_utf8_print_error_parameter_file_name_empty_ + void utf8_print_error_parameter_file_name_empty(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + + flockfile(main->error.to.stream); + + utf8_print_line_first(setting, main->error, F_false); + + fl_print_format("%[%QNo file specified at parameter index %]", main->error.to.stream, main->context.set.error, main->error.prefix, main->context.set.error); + fl_print_format("%[%ul%]", main->error.to.stream, main->context.set.notable, index, main->context.set.notable); + fl_print_format("%[.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + + funlockfile(main->error.to.stream); + } +#endif // _di_utf8_print_error_parameter_file_name_empty_ + +#ifndef _di_utf8_print_error_parameter_file_not_found_ + void utf8_print_error_parameter_file_not_found(fll_program_data_t * const main, utf8_setting_t * const setting, const bool from, const f_string_static_t name) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + + flockfile(main->error.to.stream); + + utf8_print_line_first(setting, main->error, F_false); + + fl_print_format("%[%QFailed to find the %r file '%]", main->error.to.stream, main->context.set.error, main->error.prefix, from ? utf8_string_from_s : utf8_string_to_s, main->context.set.error); + fl_print_format("%[%Q%]", main->error.to.stream, main->context.set.notable, name, main->context.set.notable); + fl_print_format("%['.%]%r", main->error.to.stream, main->context.set.error, main->context.set.error, f_string_eol_s); + + funlockfile(main->error.to.stream); + } +#endif // _di_utf8_print_error_parameter_file_not_found_ + +#ifndef _di_utf8_print_error_parameter_file_to_too_many_ + void utf8_print_error_parameter_file_to_too_many(fll_program_data_t * const main, utf8_setting_t * const setting) { + + if (main->error.verbosity == f_console_verbosity_quiet_e) return; + + utf8_print_line_first(setting, main->error, F_true); + + fll_print_format("%[%QToo many %r files specified, there may only be one to file.%]%r", main->error.to.stream, main->context.set.error, main->error.prefix, utf8_string_to_s, main->context.set.error, f_string_eol_s); + } +#endif // _di_utf8_print_error_parameter_file_to_too_many_ + +#ifndef _di_utf8_print_flush_ + void utf8_print_flush(fll_program_data_t * const main, utf8_setting_t * const setting) { + + if (setting->flag & utf8_main_flag_verify_e) return; + + if (setting->status == F_interrupt) { + if (main->output.verbosity != f_console_verbosity_quiet_e) { + f_file_stream_flush(main->output.to); + } + + if (main->output.to.stream != main->message.to.stream) { + if (main->message.verbosity != f_console_verbosity_quiet_e) { + f_file_stream_flush(main->message.to); + } + } + } + } +#endif // _di_utf8_print_flush_ + +#ifndef _di_utf8_print_help_ + f_status_t utf8_print_help(utf8_setting_t * const setting, const f_file_t output, const f_color_context_t context) { + + flockfile(output.stream); + + f_print_dynamic_raw(setting->line_first, output.stream); + + fll_program_print_help_header(output, context, utf8_program_name_long_s, utf8_program_version_s); + + fll_program_print_help_option_standard(output, context); + + f_print_dynamic_raw(f_string_eol_s, output.stream); + + fll_program_print_help_option(output, context, utf8_short_from_bytesequence_s, utf8_long_from_bytesequence_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "The expected input format is byte sequence (character data)."); + fll_program_print_help_option(output, context, utf8_short_from_codepoint_s, utf8_long_from_codepoint_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The expected input format is codepoint (such as U+0000)."); + fll_program_print_help_option(output, context, utf8_short_from_file_s, utf8_long_from_file_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Use the given output as the input source."); + + f_print_dynamic_raw(f_string_eol_s, output.stream); + + fll_program_print_help_option(output, context, utf8_short_to_bytesequence_s, utf8_long_to_bytesequence_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "The output format is byte sequence (character data)."); + fll_program_print_help_option(output, context, utf8_short_to_codepoint_s, utf8_long_to_codepoint_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The output format is codepoint (such as U+0000)."); + fll_program_print_help_option(output, context, utf8_short_to_combining_s, utf8_long_to_combining_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The output format is to print whether or not character is combining or not."); + fll_program_print_help_option(output, context, utf8_short_to_file_s, utf8_long_to_file_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Use the given output as the output destination."); + fll_program_print_help_option(output, context, utf8_short_to_width_s, utf8_long_to_width_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The output format is to print the width of a character (either 0, 1, or 2)."); + + f_print_dynamic_raw(f_string_eol_s, output.stream); + + fll_program_print_help_option(output, context, utf8_short_headers_s, utf8_long_headers_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print headers for each section (pipe, output, or parameter)."); + fll_program_print_help_option(output, context, utf8_short_separate_s, utf8_long_separate_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Separate characters by newlines (implied when printing headers)."); + fll_program_print_help_option(output, context, utf8_short_strip_invalid_s, utf8_long_strip_invalid_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "Strip invalid Unicode characters (do not print invalid sequences)."); + fll_program_print_help_option(output, context, utf8_short_verify_s, utf8_long_verify_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Only perform verification of valid sequences."); + + fll_program_print_help_usage(output, context, utf8_program_name_s, utf8_program_help_parameters_s); + + fl_print_format("%r The default behavior is to assume the expected input is byte sequence from the command line to be output to the screen as codepoints.%r%r", output.stream, f_string_eol_s, f_string_eol_s, f_string_eol_s); + + fl_print_format(" Multiple input sources are allowed but only a single output destination is allowed.%r%r", output.stream, f_string_eol_s, f_string_eol_s); + + fl_print_format(" When using the parameter '%[%r%r%]', no data is printed and 0 is returned if valid or 1 is returned if invalid.%r%r", output.stream, context.set.notable, f_console_symbol_long_enable_s, utf8_long_verify_s, context.set.notable, f_string_eol_s, f_string_eol_s); + + fl_print_format(" When using the parameter '%[%r%r%]' with the parameter ", output.stream, context.set.notable, f_console_symbol_long_enable_s, utf8_long_to_combining_s, context.set.notable); + fl_print_format("'%[%r%r%]', the ", output.stream, context.set.notable, f_console_symbol_long_enable_s, utf8_long_to_width_s, context.set.notable); + fl_print_format("'%[%r%]' character is printed to represent the combining and the digits are used to represent widths.%r", output.stream, context.set.notable, utf8_string_combining_is_s, context.set.notable, f_string_eol_s); + fl_print_format(" The combining characters should be considered 1-width by themselves or 0-width when combined.%r", output.stream, f_string_eol_s); + + f_print_dynamic_raw(setting->line_last, output.stream); + + f_file_stream_flush(output); + funlockfile(output.stream); + + return F_none; + } +#endif // _di_utf8_print_help_ + +#ifndef _di_utf8_print_line_first_ + void utf8_print_line_first(utf8_setting_t * const setting, const fl_print_t print, const bool lock) { + + if (print.verbosity == f_console_verbosity_quiet_e) return; + + if (lock) { + fll_print_dynamic_raw(setting->line_first, print.to.stream); + } + else { + f_print_dynamic_raw(setting->line_first, print.to.stream); + } + } +#endif // _di_utf8_print_line_first_ + +#ifndef _di_utf8_print_line_last_ + void utf8_print_line_last(utf8_setting_t * const setting, const fl_print_t print, const bool lock) { + + if (print.verbosity == f_console_verbosity_quiet_e) return; + if (print.verbosity == f_console_verbosity_error_e && !F_status_is_error(setting->status)) return; + if (setting->flag & utf8_main_flag_verify_e) return; + if ((setting->flag & utf8_main_flag_file_to_e) && !F_status_is_error(setting->status)) return; + + if (lock) { + fll_print_dynamic_raw(setting->line_last, print.to.stream); + } + else { + f_print_dynamic_raw(setting->line_last, print.to.stream); + } + } +#endif // _di_utf8_print_line_last_ + +#ifndef _di_utf8_print_raw_bytesequence_ + void utf8_print_raw_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_utf_char_t raw, const uint8_t width) { + + if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return; + + f_string_static_t character = macro_f_string_static_t_initialize(0, 0, width); + + f_char_t byte[character.used + 1]; + character.string = byte; + byte[character.used] = 0; + + if (raw) { + if (width == 1) { + byte[0] = macro_f_utf_char_t_to_char_4_be(raw); + } + else if (width == 2) { + byte[0] = macro_f_utf_char_t_to_char_3_be(raw); + byte[1] = macro_f_utf_char_t_to_char_4_be(raw); + } + else if (width == 3) { + byte[0] = macro_f_utf_char_t_to_char_2_be(raw); + byte[1] = macro_f_utf_char_t_to_char_3_be(raw); + byte[2] = macro_f_utf_char_t_to_char_4_be(raw); + } + else { + byte[0] = macro_f_utf_char_t_to_char_1_be(raw); + byte[1] = macro_f_utf_char_t_to_char_2_be(raw); + byte[2] = macro_f_utf_char_t_to_char_3_be(raw); + byte[3] = macro_f_utf_char_t_to_char_4_be(raw); + } + } + else { + memset(byte, 0, sizeof(f_char_t) * width); + } + + fl_print_format("%r%[%r%]%r", main->output.to.stream, setting->prepend, setting->valid_not, character, setting->valid_not, setting->append); + } +#endif // _di_utf8_print_raw_bytesequence_ + +#ifndef _di_utf8_print_raw_codepoint_ + void utf8_print_raw_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t raw) { + + if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return; + + fl_print_format("%r%[%r%]%r", main->output.to.stream, setting->prepend, setting->valid_not, raw, setting->valid_not, setting->append); + } +#endif // _di_utf8_print_raw_codepoint_ + +#ifndef _di_utf8_print_raw_combining_or_width_ + void utf8_print_raw_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const uint8_t width) { + + if (setting->flag & (utf8_main_flag_strip_invalid_e | utf8_main_flag_verify_e)) return; + + if (setting->mode & utf8_mode_to_combining_e) { + utf8_print_error_combining_or_width(main, setting); + } + else if (setting->mode & utf8_mode_to_width_e) { + const f_string_static_t *character = 0; + + switch (width) { + case 1: + character = &utf8_string_width_1_s; + break; + + case 2: + character = &utf8_string_width_2_s; + break; + + case 3: + character = &utf8_string_width_3_s; + break; + + case 4: + character = &utf8_string_width_4_s; + break; + + default: + character = &utf8_string_width_0_s; + } + + fl_print_format("%r%[%r%]%r", main->output.to.stream, setting->prepend, setting->valid_not, *character, setting->valid_not, setting->append); + } + } +#endif // _di_utf8_print_raw_combining_or_width_ + +#ifndef _di_utf8_print_section_header_file_ + void utf8_print_section_header_file(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t name, const f_array_length_t index) { + + if (!(setting->flag & (utf8_main_flag_header_e | utf8_main_flag_separate_e))) return; + if (setting->flag & utf8_main_flag_verify_e) return; + + flockfile(main->output.to.stream); + + if ((main->pipe & fll_program_data_pipe_input_e) || index) { + f_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + } + else { + f_print_dynamic_raw(setting->line_first, main->output.to.stream); + } + + if (setting->flag & utf8_main_flag_header_e) { + fl_print_format("%[File%] ", main->output.to.stream, main->output.set->title, main->output.set->title); + + if (setting->flag & utf8_main_flag_file_to_e) { + fl_print_format("%[%Q%]: %Q.%r", main->output.to.stream, main->output.set->notable, name, main->output.set->notable, setting->path_files_to.array[0], f_string_eol_s); + } + else { + fl_print_format("%[%Q%]:%r", main->output.to.stream, main->output.set->notable, name, main->output.set->notable, f_string_eol_s); + } + } + + funlockfile(main->output.to.stream); + } +#endif // _di_utf8_print_section_header_file_ + +#ifndef _di_utf8_print_section_header_parameter_ + void utf8_print_section_header_parameter(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index) { + + if (!(setting->flag & (utf8_main_flag_header_e | utf8_main_flag_separate_e))) return; + if (setting->flag & utf8_main_flag_verify_e) return; + + flockfile(main->output.to.stream); + + if ((main->pipe & fll_program_data_pipe_input_e) || (setting->flag & utf8_main_flag_file_from_e) || index) { + f_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + } + else { + f_print_dynamic_raw(setting->line_first, main->output.to.stream); + } + + if (setting->flag & utf8_main_flag_header_e) { + fl_print_format("%[Parameter%] ", main->output.to.stream, main->output.set->title, main->output.set->title); + fl_print_format("%[%ul%]:%r", main->output.to.stream, main->output.set->notable, index, main->output.set->notable, f_string_eol_s); + } + + funlockfile(main->output.to.stream); + } +#endif // _di_utf8_print_section_header_parameter_ + +#ifndef _di_utf8_print_section_header_pipe_ + void utf8_print_section_header_pipe(fll_program_data_t * const main, utf8_setting_t * const setting) { + + if (!(setting->flag & (utf8_main_flag_header_e | utf8_main_flag_separate_e))) return; + if (setting->flag & utf8_main_flag_verify_e) return; + + flockfile(main->output.to.stream); + + f_print_dynamic_raw(setting->line_first, main->output.to.stream); + + if (setting->flag & utf8_main_flag_header_e) { + fl_print_format("%[Pipe%]:%r", main->output.to.stream, main->output.set->title, main->output.set->title, f_string_eol_s); + } + + funlockfile(main->output.to.stream); + } +#endif // _di_utf8_print_section_header_pipe_ + +#ifndef _di_utf8_print_signal_received_ + void utf8_print_signal_received(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t signal) { + + if (main->warning.verbosity != f_console_verbosity_verbose_e && main->warning.verbosity != f_console_verbosity_debug_e) { + return; + } + + flockfile(main->warning.to.stream); + + // Must flush and reset color because the interrupt may have interrupted the middle of a print function. + f_file_stream_flush(main->warning.to); + + fl_print_format("%]", main->warning.to.stream, main->context.set.reset); + + utf8_print_line_first(setting, main->warning, F_false); + + fl_print_format("%r%[Received signal code %]", main->warning.to.stream, f_string_eol_s, main->context.set.warning, main->context.set.warning); + fl_print_format("%[%i%]", main->warning.to.stream, main->context.set.notable, signal, main->context.set.notable); + fl_print_format("%[.%]%r", main->warning.to.stream, main->context.set.warning, main->context.set.warning, f_string_eol_s); + + funlockfile(main->warning.to.stream); + } +#endif // _di_utf8_print_signal_received_ + +#ifndef _di_utf8_print_width_ + void utf8_print_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) { + + f_status_t status = f_utf_is_wide(sequence.string, sequence.used); + + if (status == F_true) { + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, utf8_string_width_2_s, setting->append); + + return; + } + + if (status == F_false) { + status = f_utf_is_graph(sequence.string, sequence.used); + + if (status == F_true) { + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, utf8_string_width_1_s, setting->append); + + return; + } + + if (status == F_false) { + fl_print_format("%r%r%r", main->output.to.stream, setting->prepend, utf8_string_width_0_s, setting->append); + + return; + } + } + + utf8_print_error_combining_or_width(main, setting); + } +#endif // _di_utf8_print_width_ + +#ifdef __cplusplus +} // extern "C" +#endif diff --git a/level_3/utf8/c/print.h b/level_3/utf8/c/print.h new file mode 100644 index 000000000..21da76cd8 --- /dev/null +++ b/level_3/utf8/c/print.h @@ -0,0 +1,418 @@ +/** + * FLL - Level 3 + * + * Project: UTF-8 + * API Version: 0.7 + * Licenses: lgpl-2.1-or-later + */ +#ifndef _utf8_print_h +#define _utf8_print_h + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * Print the byte sequence character (such as '豸'). + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param sequence + * A byte sequences representing a single character to print. + */ +#ifndef _di_utf8_print_bytesequence_ + extern void utf8_print_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence); +#endif // _di_utf8_print_bytesequence_ + +/** + * Print an invalid character either as a Unicode codeblock or as a byte sequence. + * + * This handles whether or not the invalid character should be printed or not based on program parameters. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param invalid + * The byte sequence string or unicode codepoint string representing a single character to print. + * + * @see utf8_print_combining_or_width() + */ +#ifndef _di_utf8_print_character_invalid_ + extern void utf8_print_character_invalid(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t invalid); +#endif // _di_utf8_print_character_invalid_ + +/** + * Print the codepoint number as a codepoint string (such as U+8C78). + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param codepoint + * The codepoint to print. + * This is the code that represents a single character. + */ +#ifndef _di_utf8_print_codepoint_ + extern void utf8_print_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const uint32_t codepoint); +#endif // _di_utf8_print_codepoint_ + +/** + * Print the width or combining state of the given character. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param sequence + * A byte sequences representing a single character to print. + * + * @see utf8_print_width() + */ +#ifndef _di_utf8_print_combining_or_width_ + extern void utf8_print_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence); +#endif // _di_utf8_print_combining_or_width_ + +/** + * Print an error regarding the width or combining state of a some character. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + */ +#ifndef _di_utf8_print_error_combining_or_width_ + extern void utf8_print_error_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_print_error_combining_or_width_ + +/** + * Print error message when attempt to decode the character failed. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param invalid + * The byte sequence string or unicode codepoint string representing a single character to print. + */ +#ifndef _di_utf8_print_error_decode_ + extern void utf8_print_error_decode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const f_string_static_t invalid); +#endif // _di_utf8_print_error_decode_ + +/** + * Print error message when attempt to encode the character failed. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param codepoint + * The codepoint that is invalid. + */ +#ifndef _di_utf8_print_error_encode_ + extern void utf8_print_error_encode(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t status, const uint32_t codepoint); +#endif // _di_utf8_print_error_encode_ + +/** + * Print error message for when no sources are provided. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + */ +#ifndef _di_utf8_print_error_no_from_ + extern void utf8_print_error_no_from(fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_print_error_no_from_ + +/** + * Print error message for when no sources are provided. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param parameter + * The long parameter name. + */ +#ifndef _di_utf8_print_error_no_value_ + extern void utf8_print_error_no_value(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t parameter); +#endif // _di_utf8_print_error_no_value_ + +/** + * Print error message for when the file parameter is an empty string. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param index + * The index within the argv[] array where the empty string is found. + */ +#ifndef _di_utf8_print_error_parameter_file_name_empty_ + extern void utf8_print_error_parameter_file_name_empty(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index); +#endif // _di_utf8_print_error_parameter_file_name_empty_ + +/** + * Print error message for when no sources are provided in the main program parameters. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param from + * If TRUE, then this is a from file (source file). + * If FALSE, then this is a to file (destination file). + * @param name + * The file path name. + */ +#ifndef _di_utf8_print_error_parameter_file_not_found_ + extern void utf8_print_error_parameter_file_not_found(fll_program_data_t * const main, utf8_setting_t * const setting, const bool from, const f_string_static_t name); +#endif // _di_utf8_print_error_parameter_file_not_found_ + +/** + * Print error message for when too many 'to' destinations are specified. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + */ +#ifndef _di_utf8_print_error_parameter_file_to_too_many_ + extern void utf8_print_error_parameter_file_to_too_many(fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_print_error_parameter_file_to_too_many_ + +/** + * Flush the output, if appropriate. + * + * This is intended to be run after the utf8_main() is complete. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * This does not alter setting.status. + */ +#ifndef _di_utf8_print_flush_ + extern void utf8_print_flush(fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_print_flush_ + +/** + * Print help. + * + * @param setting + * The main program settings. + * This does not alter setting.status. + * @param output + * The file to print to. + * @param context + * The color context settings. + * + * @return + * F_none on success. + * F_true on success and validation passed. + * F_false on success and validation failed. + */ +#ifndef _di_utf8_print_help_ + extern f_status_t utf8_print_help(utf8_setting_t * const setting, const f_file_t output, const f_color_context_t context); +#endif // _di_utf8_print_help_ + +/** + * Print first new line, unless verbosity says otherwise. + * + * This is generally either the first line in the program or the first line printed before an error message. + * + * @param setting + * The main program settings. + * This does not alter setting.status. + * @param print + * Designates how the how and where to print. + * @param lock + * If TRUE, then lock the stream. + * If FALSE, then do not lock or unlock the stream. + */ +#ifndef _di_utf8_print_line_first_ + extern void utf8_print_line_first(utf8_setting_t * const setting, const fl_print_t print, const bool lock); +#endif // _di_utf8_print_line_first_ + +/** + * Print last new line when the main is complete, unless verbosity says otherwise. + * + * This is generally the very last line printed in the program. + * + * @param setting + * The main program settings. + * This does not alter setting.status. + * @param print + * Designates how the how and where to print. + * @param lock + * If TRUE, then lock the stream. + * If FALSE, then do not lock or unlock the stream. + */ +#ifndef _di_utf8_print_line_last_ + extern void utf8_print_line_last(utf8_setting_t * const setting, const fl_print_t print, const bool lock); +#endif // _di_utf8_print_line_last_ + +/** + * Print the raw character data (binary / byte sequence). + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param raw + * The raw string in integer format. + * @param width + * The width the raw character represents (a value inclusively from 1 to 4). + */ +#ifndef _di_utf8_print_raw_bytesequence_ + extern void utf8_print_raw_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_utf_char_t raw, const uint8_t width); +#endif // _di_utf8_print_raw_bytesequence_ + +/** + * Print the raw character data (codepoint). + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param raw + * The raw string already in codepoint format. + */ +#ifndef _di_utf8_print_raw_codepoint_ + extern void utf8_print_raw_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t raw); +#endif // _di_utf8_print_raw_codepoint_ + +/** + * Print the width or combining state of the for a raw character. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param width + * The pre-calculated width. + * + * @see utf8_print_width() + */ +#ifndef _di_utf8_print_raw_combining_or_width_ + extern void utf8_print_raw_combining_or_width(fll_program_data_t * const main, utf8_setting_t * const setting, const uint8_t width); +#endif // _di_utf8_print_raw_combining_or_width_ + +/** + * Print the input file section header. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param name + * The name of the file. + * @param index + * The index position of the file. + */ +#ifndef _di_utf8_print_section_header_file_ + extern void utf8_print_section_header_file(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t name, const f_array_length_t index); +#endif // _di_utf8_print_section_header_file_ + +/** + * Print the input parameter section header. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param index + * The index position of the parameter. + */ +#ifndef _di_utf8_print_section_header_parameter_ + extern void utf8_print_section_header_parameter(fll_program_data_t * const main, utf8_setting_t * const setting, const f_array_length_t index); +#endif // _di_utf8_print_section_header_parameter_ + +/** + * Print the input pipe section header. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + */ +#ifndef _di_utf8_print_section_header_pipe_ + extern void utf8_print_section_header_pipe(fll_program_data_t * const main, utf8_setting_t * const setting); +#endif // _di_utf8_print_section_header_pipe_ + +/** + * Print a message about a process signal being recieved, such as an interrupt signal. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param signal + * The signal code received. + */ +#ifndef _di_utf8_print_signal_received_ + extern void utf8_print_signal_received(fll_program_data_t * const main, utf8_setting_t * const setting, const f_status_t signal); +#endif // _di_utf8_print_signal_received_ + +/** + * Print the width of the given character. + * + * @param main + * The main program data. + * @param setting + * The main program settings. + * + * Assumed to always be non-NULL. + * @param sequence + * A byte sequences representing a single character whose width is to be printed. + */ +#ifndef _di_utf8_print_width_ + extern void utf8_print_width(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence); +#endif // _di_utf8_print_width_ + +#ifdef __cplusplus +} // extern "C" +#endif + +#endif // _utf8_print_h diff --git a/level_3/utf8/c/private-common.c b/level_3/utf8/c/private-common.c index f6bc32618..c289854c1 100644 --- a/level_3/utf8/c/private-common.c +++ b/level_3/utf8/c/private-common.c @@ -1,19 +1,10 @@ #include "utf8.h" #include "private-common.h" -#include "private-print.h" #ifdef __cplusplus extern "C" { #endif -#ifndef _di_utf8_data_delete_ - void utf8_data_delete(utf8_data_t *data) { - - f_string_dynamic_resize(0, &data->buffer); - f_string_dynamic_resize(0, &data->text); - } -#endif // _di_utf8_data_delete_ - #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/utf8/c/private-common.h b/level_3/utf8/c/private-common.h index 40fc9cb98..4e587c058 100644 --- a/level_3/utf8/c/private-common.h +++ b/level_3/utf8/c/private-common.h @@ -45,68 +45,6 @@ extern "C" { }; #endif // _di__utf8_codepoint_modes_ -/** - * The program data. - * - * main: The main program data. - * setting: The main program settings. - * argv: The argument structure in the progam data parameters for simplifying syntax. - * - * main: The main program data. - * file: The output file for writing the processed data to (may potentially default to "output"). - * valid: Designate the output context set for valid characters. - * valid_not: Designate the output context set for invalid characters. - * append: A string to append. A value of NULL results in not appending. - * prepend: A string to prepend. A value of NULL results in not prepending. - * buffer: A buffer to use for printing output (generally for storing a block of input from an input file). - * text: A buffer for storing a series of characters for processing (generally for codepoint processing). - */ -#ifndef _di_utf8_data_t_ - typedef struct { - fll_program_data_t *main; - utf8_main_setting_t *setting; - f_string_static_t *argv; - - //f_file_t file; - - f_color_set_t valid; - f_color_set_t valid_not; - - f_string_static_t append; - f_string_static_t prepend; - - f_string_dynamic_t buffer; - f_string_dynamic_t text; - } utf8_data_t; - - #define utf8_data_t_initialize \ - { \ - 0, \ - 0, \ - 0, \ - //f_file_t_initialize, \ - f_color_set_t_initialize, \ - f_color_set_t_initialize, \ - f_string_static_t_initialize, \ - f_string_static_t_initialize, \ - f_string_dynamic_t_initialize, \ - f_string_dynamic_t_initialize, \ - } -#endif // _di_utf8_data_t_ - -/** - * Deallocate program data. - * - * @param data - * The program data. - * - * @return - * F_none on success. - */ -#ifndef _di_utf8_data_delete_ - extern void utf8_data_delete(utf8_data_t *data) F_attribute_visibility_internal_d; -#endif // _di_utf8_data_delete_ - #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/utf8/c/private-print.c b/level_3/utf8/c/private-print.c deleted file mode 100644 index 32346cd68..000000000 --- a/level_3/utf8/c/private-print.c +++ /dev/null @@ -1,407 +0,0 @@ -#include "utf8.h" -#include "private-common.h" -#include "private-print.h" - -#ifdef __cplusplus -extern "C" { -#endif - -#ifndef _di_utf8_print_bytesequence_ - void utf8_print_bytesequence(utf8_data_t * const data, const f_string_static_t sequence) { - - fl_print_format("%r%r%r", data->file.stream, data->prepend, sequence, data->append); - } -#endif // _di_utf8_print_bytesequence_ - -#ifndef _di_utf8_print_character_invalid_ - void utf8_print_character_invalid(utf8_data_t * const data, const f_string_static_t invalid) { - - if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - if (!invalid.used) return; - - if ((data->mode & utf8_mode_to_combining_d) || (data->mode & utf8_mode_to_width_d)) { - utf8_print_combining_or_width(data, invalid); - } - else if (data->mode & utf8_mode_to_bytesequence_d) { - fl_print_format("%r%[%r%]%r", data->file.stream, data->prepend, data->valid_not, invalid, data->valid_not, data->append); - } - else if (data->mode & utf8_mode_from_codepoint_d) { - fl_print_format("%r%[%Q%]%r", data->file.stream, data->prepend, data->valid_not, invalid, data->valid_not, data->append); - } - else { - fl_print_format("%r%[0x", data->file.stream, data->prepend, data->valid_not); - - for (uint8_t i = 0; i < invalid.used; ++i) { - fl_print_format("%02_uii", data->file.stream, (uint8_t) invalid.string[i]); - } // for - - fl_print_format("%]%r", data->file.stream, data->valid_not, data->append); - } - } -#endif // _di_utf8_print_character_invalid_ - -#ifndef _di_utf8_print_codepoint_ - void utf8_print_codepoint(utf8_data_t * const data, const uint32_t codepoint) { - - if (codepoint < 0x10000) { - fl_print_format("%rU+%04_U%r", data->file.stream, data->prepend, codepoint, data->append); - } - else if (codepoint < 0x100000) { - fl_print_format("%rU+%05_U%r", data->file.stream, data->prepend, codepoint, data->append); - } - else { - fl_print_format("%rU+%06_U%r", data->file.stream, data->prepend, codepoint, data->append); - } - } -#endif // _di_utf8_print_codepoint_ - -#ifndef _di_utf8_print_combining_or_width_ - void utf8_print_combining_or_width(utf8_data_t * const data, const f_string_static_t sequence) { - - f_status_t status = F_none; - - if (data->mode & utf8_mode_to_combining_d) { - status = f_utf_is_combining(sequence.string, sequence.used); - - if (status == F_true) { - fl_print_format("%r%r%r", data->file.stream, data->prepend, utf8_string_combining_is_s, data->append); - } - else if (status == F_false) { - status = f_utf_is_private(sequence.string, sequence.used); - - if (status == F_true) { - fl_print_format("%r%r%r", data->file.stream, data->prepend, utf8_string_unknown_s, data->append); - } - else if (data->mode & utf8_mode_to_width_d) { - utf8_print_width(data, sequence); - } - else { - fl_print_format("%r%r%r", data->file.stream, data->prepend, utf8_string_combining_not_s, data->append); - } - } - else if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_none_e && data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_none_e) { - utf8_print_error_combining_or_width(data); - } - } - else if (data->mode & utf8_mode_to_width_d) { - utf8_print_width(data, sequence); - } - } -#endif // _di_utf8_print_combining_or_width_ - -#ifndef _di_utf8_print_error_combining_or_width_ - void utf8_print_error_combining_or_width(utf8_data_t * const data) { - - if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - fl_print_format("%r%[%r%]%r", data->file.stream, data->prepend, data->valid_not, utf8_string_unknown_s, data->valid_not, data->append); - } -#endif // _di_utf8_print_error_combining_or_width_ - -#ifndef _di_utf8_print_error_decode_ - void utf8_print_error_decode(utf8_data_t * const data, const f_status_t status, const f_string_static_t invalid) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - fl_print_format("%r%[%QFailed to decode character code '%]", data->main->error.to.stream, f_string_eol_s, data->main->context.set.error, data->main->error.prefix, data->main->context.set.error); - - if (invalid.used) { - fl_print_format("%[0x", data->main->error.to.stream, data->main->context.set.notable); - - for (uint8_t i = 0; i < invalid.used; ++i) { - fl_print_format("%02_uii", data->main->error.to.stream, (uint8_t) invalid.string[i]); - } // for - - fl_print_format("%]", data->main->error.to.stream, data->main->context.set.notable); - } - - if (F_status_set_fine(status) == F_utf_not) { - fl_print_format("%[', not a valid UTF-8 character sequence.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - } - else if (F_status_set_fine(status) == F_complete_not_utf) { - fl_print_format("%[', invalid UTF-8 (truncated).%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - } - else if (F_status_set_fine(status) == F_utf_fragment) { - fl_print_format("%[', invalid UTF-8 fragment.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - } - else { - fl_print_format("%[', error status code%] ", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - fl_print_format("%[%ui%]", data->main->error.to.stream, data->main->context.set.notable, F_status_set_fine(status), data->main->context.set.notable); - fl_print_format("%[.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - } - } -#endif // _di_utf8_print_error_decode_ - -#ifndef _di_utf8_print_error_encode_ - void utf8_print_error_encode(utf8_data_t * const data, const f_status_t status, const uint32_t codepoint) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - - fl_print_format("%r%[%QFailed to encode Unicode codepoint '%]", data->main->error.to.stream, f_string_eol_s, data->main->context.set.error, data->main->error.prefix, data->main->context.set.error); - fl_print_format("%[U+%_U%]", data->main->error.to.stream, data->main->context.set.notable, codepoint, data->main->context.set.notable); - - if (F_status_set_fine(status) == F_utf_not) { - fl_print_format("%[', not a valid Unicode codepoint.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - } - else { - fl_print_format("%[', error status code%] ", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - fl_print_format("%[%ui%]", data->main->error.to.stream, data->main->context.set.notable, F_status_set_fine(status), data->main->context.set.notable); - fl_print_format("%[.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - } - } -#endif // _di_utf8_print_error_encode_ - -#ifndef _di_utf8_print_error_no_from_ - void utf8_print_error_no_from(utf8_data_t * const data) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - - fll_print_format("%r%[%QNo from sources are specified, please pipe data, designate a file, or add parameters.%]%r", data->main->error.to.stream, f_string_eol_s, data->main->error.context, data->main->error.prefix, data->main->error.context, f_string_eol_s); - } -#endif // _di_utf8_print_error_no_from_ - -#ifndef _di_utf8_print_error_no_value_ - void utf8_print_error_no_value(utf8_data_t * const data, const f_string_static_t parameter) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - - flockfile(data->main->error.to.stream); - - fl_print_format("%r%[%QThe parameter '%]", data->main->error.to.stream, f_string_eol_s, data->main->context.set.error, data->main->error.prefix, data->main->context.set.error); - fl_print_format("%[%r%r%]", data->main->error.to.stream, data->main->context.set.notable, f_console_symbol_long_enable_s, parameter, data->main->context.set.notable); - fl_print_format("%[' is specified, but no value was given.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - - funlockfile(data->main->error.to.stream); - } -#endif // _di_utf8_print_error_no_value_ - -#ifndef _di_utf8_print_error_parameter_file_name_empty_ - void utf8_print_error_parameter_file_name_empty(utf8_data_t * const data, const f_array_length_t index) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - - flockfile(data->main->error.to.stream); - - fl_print_format("%r%[%QNo file specified at parameter index %]", data->main->error.to.stream, f_string_eol_s, data->main->context.set.error, data->main->error.prefix, data->main->context.set.error); - fl_print_format("%[%ul%]", data->main->error.to.stream, data->main->context.set.notable, index, data->main->context.set.notable); - fl_print_format("%[.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - - funlockfile(data->main->error.to.stream); - } -#endif // _di_utf8_print_error_parameter_file_name_empty_ - -#ifndef _di_utf8_print_error_parameter_file_not_found_ - void utf8_print_error_parameter_file_not_found(utf8_data_t * const data, const bool from, const f_string_static_t name) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - - flockfile(data->main->error.to.stream); - - fl_print_format("%r%[%QFailed to find the %r file '%]", data->main->error.to.stream, f_string_eol_s, data->main->context.set.error, data->main->error.prefix, from ? utf8_string_from_s : utf8_string_to_s, data->main->context.set.error); - fl_print_format("%[%Q%]", data->main->error.to.stream, data->main->context.set.notable, name, data->main->context.set.notable); - fl_print_format("%['.%]%r", data->main->error.to.stream, data->main->context.set.error, data->main->context.set.error, f_string_eol_s); - - funlockfile(data->main->error.to.stream); - } -#endif // _di_utf8_print_error_parameter_file_not_found_ - -#ifndef _di_utf8_print_error_parameter_file_to_too_many_ - void utf8_print_error_parameter_file_to_too_many(utf8_data_t * const data) { - - if (data->main->error.verbosity == f_console_verbosity_quiet_e) return; - - fll_print_format("%r%[%QToo many %r files specified, there may only be one to file.%]%r", data->main->error.to.stream, f_string_eol_s, data->main->context.set.error, data->main->error.prefix, utf8_string_to_s, data->main->context.set.error, f_string_eol_s); - } -#endif // _di_utf8_print_error_parameter_file_to_too_many_ - -#ifndef _di_utf8_print_raw_bytesequence_ - void utf8_print_raw_bytesequence(utf8_data_t * const data, const f_utf_char_t raw, const uint8_t width) { - - if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - f_string_static_t character = macro_f_string_static_t_initialize(0, 0, width); - - f_char_t byte[character.used + 1]; - character.string = byte; - byte[character.used] = 0; - - if (raw) { - if (width == 1) { - byte[0] = macro_f_utf_char_t_to_char_4_be(raw); - } - else if (width == 2) { - byte[0] = macro_f_utf_char_t_to_char_3_be(raw); - byte[1] = macro_f_utf_char_t_to_char_4_be(raw); - } - else if (width == 3) { - byte[0] = macro_f_utf_char_t_to_char_2_be(raw); - byte[1] = macro_f_utf_char_t_to_char_3_be(raw); - byte[2] = macro_f_utf_char_t_to_char_4_be(raw); - } - else { - byte[0] = macro_f_utf_char_t_to_char_1_be(raw); - byte[1] = macro_f_utf_char_t_to_char_2_be(raw); - byte[2] = macro_f_utf_char_t_to_char_3_be(raw); - byte[3] = macro_f_utf_char_t_to_char_4_be(raw); - } - } - else { - memset(byte, 0, sizeof(f_char_t) * width); - } - - fl_print_format("%r%[%r%]%r", data->file.stream, data->prepend, data->valid_not, character, data->valid_not, data->append); - } -#endif // _di_utf8_print_raw_bytesequence_ - -#ifndef _di_utf8_print_raw_codepoint_ - void utf8_print_raw_codepoint(utf8_data_t * const data, const f_string_static_t raw) { - - if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - fl_print_format("%r%[%r%]%r", data->file.stream, data->prepend, data->valid_not, raw, data->valid_not, data->append); - } -#endif // _di_utf8_print_raw_codepoint_ - -#ifndef _di_utf8_print_raw_combining_or_width_ - void utf8_print_raw_combining_or_width(utf8_data_t * const data, const uint8_t width) { - - if (data->main->parameters.array[utf8_parameter_strip_invalid_e].result == f_console_result_found_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - if (data->mode & utf8_mode_to_combining_d) { - utf8_print_error_combining_or_width(data); - } - else if (data->mode & utf8_mode_to_width_d) { - const f_string_static_t *character = 0; - - switch (width) { - case 1: - character = &utf8_string_width_1_s; - break; - - case 2: - character = &utf8_string_width_2_s; - break; - - case 3: - character = &utf8_string_width_3_s; - break; - - case 4: - character = &utf8_string_width_4_s; - break; - - default: - character = &utf8_string_width_0_s; - } - - fl_print_format("%r%[%r%]%r", data->file.stream, data->prepend, data->valid_not, *character, data->valid_not, data->append); - } - } -#endif // _di_utf8_print_raw_combining_or_width_ - -#ifndef _di_utf8_print_section_header_file_ - void utf8_print_section_header_file(utf8_data_t * const data, const f_string_static_t name) { - - if (data->main->parameters.array[utf8_parameter_headers_e].result == f_console_result_none_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - flockfile(data->main->output.to.stream); - - fl_print_format("%r%[File%] ", data->main->output.to.stream, f_string_eol_s, data->main->output.set->title, data->main->output.set->title); - - if (data->file.stream == data->main->output.to.stream) { - fl_print_format("%[%Q%]:%r", data->main->output.to.stream, data->main->output.set->notable, name, data->main->output.set->notable, f_string_eol_s); - } - else { - fl_print_format("%[%Q%]: %Q.%r", data->main->output.to.stream, data->main->output.set->notable, name, data->main->output.set->notable, data->argv[data->main->parameters.array[utf8_parameter_to_file_e].values.array[0]], f_string_eol_s); - } - - funlockfile(data->main->output.to.stream); - } -#endif // _di_utf8_print_section_header_file_ - -#ifndef _di_utf8_print_section_header_parameter_ - void utf8_print_section_header_parameter(utf8_data_t * const data, const f_array_length_t index) { - - if (data->main->parameters.array[utf8_parameter_headers_e].result == f_console_result_none_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - flockfile(data->main->output.to.stream); - - fl_print_format("%r%[Parameter%] ", data->main->output.to.stream, f_string_eol_s, data->main->output.set->title, data->main->output.set->title); - fl_print_format("%[%ul%]:%r", data->main->output.to.stream, data->main->output.set->notable, index, data->main->output.set->notable, f_string_eol_s); - - funlockfile(data->main->output.to.stream); - } -#endif // _di_utf8_print_section_header_parameter_ - -#ifndef _di_utf8_print_section_header_pipe_ - void utf8_print_section_header_pipe(utf8_data_t * const data) { - - if (data->main->parameters.array[utf8_parameter_headers_e].result == f_console_result_none_e) return; - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) return; - - fll_print_format("%r%[Pipe%]:%r", data->main->output.to.stream, f_string_eol_s, data->main->output.set->title, data->main->output.set->title, f_string_eol_s); - } -#endif // _di_utf8_print_section_header_pipe_ - -#ifndef _di_utf8_print_signal_received_ - void utf8_print_signal_received(utf8_data_t * const data, const f_status_t signal) { - - if (data->main->warning.verbosity != f_console_verbosity_verbose_e && data->main->warning.verbosity != f_console_verbosity_debug_e) return; - - // Must flush and reset color because the interrupt may have interrupted the middle of a print function. - fflush(data->main->warning.to.stream); - - flockfile(data->main->warning.to.stream); - - fl_print_format("%]%r%r%[Received signal code %]", data->main->warning.to.stream, data->main->context.set.reset, f_string_eol_s, f_string_eol_s, data->main->context.set.warning, data->main->context.set.warning); - fl_print_format("%[%i%]", data->main->warning.to.stream, data->main->context.set.notable, signal, data->main->context.set.notable); - fl_print_format("%[.%]%r", data->main->warning.to.stream, data->main->context.set.warning, data->main->context.set.warning, f_string_eol_s); - - funlockfile(data->main->warning.to.stream); - } -#endif // _di_utf8_print_signal_received_ - -#ifndef _di_utf8_print_width_ - void utf8_print_width(utf8_data_t * const data, const f_string_static_t sequence) { - - f_status_t status = f_utf_is_wide(sequence.string, sequence.used); - - if (status == F_true) { - fl_print_format("%r%r%r", data->file.stream, data->prepend, utf8_string_width_2_s, data->append); - - return; - } - - if (status == F_false) { - status = f_utf_is_graph(sequence.string, sequence.used); - - if (status == F_true) { - fl_print_format("%r%r%r", data->file.stream, data->prepend, utf8_string_width_1_s, data->append); - - return; - } - - if (status == F_false) { - fl_print_format("%r%r%r", data->file.stream, data->prepend, utf8_string_width_0_s, data->append); - - return; - } - } - - utf8_print_error_combining_or_width(data); - } -#endif // _di_utf8_print_width_ - -#ifdef __cplusplus -} // extern "C" -#endif diff --git a/level_3/utf8/c/private-print.h b/level_3/utf8/c/private-print.h deleted file mode 100644 index e16320d59..000000000 --- a/level_3/utf8/c/private-print.h +++ /dev/null @@ -1,265 +0,0 @@ -/** - * FLL - Level 3 - * - * Project: UTF-8 - * API Version: 0.7 - * Licenses: lgpl-2.1-or-later - */ -#ifndef _PRIVATE_utf8_print_h -#define _PRIVATE_utf8_print_h - -#ifdef __cplusplus -extern "C" { -#endif - -/** - * Print the byte sequence character (such as '豸'). - * - * @param data - * The program data. - * @param sequence - * A byte sequences representing a single character to print. - */ -#ifndef _di_utf8_print_bytesequence_ - extern void utf8_print_bytesequence(utf8_data_t * const data, const f_string_static_t sequence) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_bytesequence_ - -/** - * Print an invalid character either as a Unicode codeblock or as a byte sequence. - * - * This handles whether or not the invalid character should be printed or not based on program parameters. - * - * @param data - * The program data. - * @param invalid - * The byte sequence string or unicode codepoint string representing a single character to print. - * - * @see utf8_print_combining_or_width() - */ -#ifndef _di_utf8_print_character_invalid_ - extern void utf8_print_character_invalid(utf8_data_t * const data, const f_string_static_t invalid) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_character_invalid_ - -/** - * Print the codepoint number as a codepoint string (such as U+8C78). - * - * @param data - * The program data. - * @param codepoint - * The codepoint to print. - * This is the code that represents a single character. - */ -#ifndef _di_utf8_print_codepoint_ - extern void utf8_print_codepoint(utf8_data_t * const data, const uint32_t codepoint) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_codepoint_ - -/** - * Print the width or combining state of the given character. - * - * @param data - * The program data. - * @param sequence - * A byte sequences representing a single character to print. - * - * @see utf8_print_width() - */ -#ifndef _di_utf8_print_combining_or_width_ - extern void utf8_print_combining_or_width(utf8_data_t * const data, const f_string_static_t sequence) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_combining_or_width_ - -/** - * Print an error regarding the width or combining state of a some character. - * - * @param data - * The program data. - */ -#ifndef _di_utf8_print_error_combining_or_width_ - extern void utf8_print_error_combining_or_width(utf8_data_t * const data) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_combining_or_width_ - -/** - * Print error message when attempt to decode the character failed. - * - * @param data - * The program data. - * @param invalid - * The byte sequence string or unicode codepoint string representing a single character to print. - */ -#ifndef _di_utf8_print_error_decode_ - extern void utf8_print_error_decode(utf8_data_t * const data, const f_status_t status, const f_string_static_t invalid) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_decode_ - -/** - * Print error message when attempt to encode the character failed. - * - * @param data - * The program data. - * @param codepoint - * The codepoint that is invalid. - */ -#ifndef _di_utf8_print_error_encode_ - extern void utf8_print_error_encode(utf8_data_t * const data, const f_status_t status, const uint32_t codepoint) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_encode_ - -/** - * Print error message for when no sources are provided. - * - * @param data - * The program data. - */ -#ifndef _di_utf8_print_error_no_from_ - extern void utf8_print_error_no_from(utf8_data_t * const data) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_no_from_ - -/** - * Print error message for when no sources are provided. - * - * @param data - * The program data. - * @param parameter - * The long parameter name. - */ -#ifndef _di_utf8_print_error_no_value_ - extern void utf8_print_error_no_value(utf8_data_t * const data, const f_string_static_t parameter) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_no_value_ - -/** - * Print error message for when the file parameter is an empty string. - * - * @param data - * The program data. - * @param index - * The index within the argv[] array where the empty string is found. - */ -#ifndef _di_utf8_print_error_parameter_file_name_empty_ - extern void utf8_print_error_parameter_file_name_empty(utf8_data_t * const data, const f_array_length_t index) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_parameter_file_name_empty_ - -/** - * Print error message for when no sources are provided in the main program parameters. - * - * @param data - * The program data. - * @param from - * If TRUE, then this is a from file (source file). - * If FALSE, then this is a to file (destination file). - * @param name - * The file path name. - */ -#ifndef _di_utf8_print_error_parameter_file_not_found_ - extern void utf8_print_error_parameter_file_not_found(utf8_data_t * const data, const bool from, const f_string_static_t name) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_parameter_file_not_found_ - -/** - * Print error message for when too many 'to' destinations are specified. - * - * @param data - * The program data. - */ -#ifndef _di_utf8_print_error_parameter_file_to_too_many_ - extern void utf8_print_error_parameter_file_to_too_many(utf8_data_t * const data) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_error_parameter_file_to_too_many_ - -/** - * Print the raw character data (binary / byte sequence). - * - * @param data - * The program data. - * @param raw - * The raw string in integer format. - * @param width - * The width the raw character represents (a value inclusively from 1 to 4). - */ -#ifndef _di_utf8_print_raw_bytesequence_ - extern void utf8_print_raw_bytesequence(utf8_data_t * const data, const f_utf_char_t raw, const uint8_t width) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_raw_bytesequence_ - -/** - * Print the raw character data (codepoint). - * - * @param data - * The program data. - * @param raw - * The raw string already in codepoint format. - */ -#ifndef _di_utf8_print_raw_codepoint_ - extern void utf8_print_raw_codepoint(utf8_data_t * const data, const f_string_static_t raw) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_raw_codepoint_ - -/** - * Print the width or combining state of the for a raw character. - * - * @param data - * The program data. - * @param width - * The pre-calculated width. - * - * @see utf8_print_width() - */ -#ifndef _di_utf8_print_raw_combining_or_width_ - extern void utf8_print_raw_combining_or_width(utf8_data_t * const data, const uint8_t width) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_raw_combining_or_width_ - -/** - * Print the input file section header. - * - * @param data - * The program data. - * @param name - * The name of the file. - */ -#ifndef _di_utf8_print_section_header_file_ - extern void utf8_print_section_header_file(utf8_data_t * const data, const f_string_static_t name) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_section_header_file_ - -/** - * Print the input parameter section header. - * - * @param data - * The program data. - * @param index - * The index position of the parameter. - */ -#ifndef _di_utf8_print_section_header_parameter_ - extern void utf8_print_section_header_parameter(utf8_data_t * const data, const f_array_length_t index) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_section_header_parameter_ - -/** - * Print the input pipe section header. - * - * @param data - * The program data. - */ -#ifndef _di_utf8_print_section_header_pipe_ - extern void utf8_print_section_header_pipe(utf8_data_t * const data) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_section_header_pipe_ - -/** - * Print a message about a process signal being recieved, such as an interrupt signal. - * - * @param data - * The program data. - * @param signal - * The signal code received. - */ -#ifndef _di_utf8_print_signal_received_ - extern void utf8_print_signal_received(utf8_data_t * const data, const f_status_t signal) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_signal_received_ - -/** - * Print the width of the given character. - * - * @param data - * The program data. - * @param sequence - * A byte sequences representing a single character whose width is to be printed. - */ -#ifndef _di_utf8_print_width_ - extern void utf8_print_width(utf8_data_t * const data, const f_string_static_t sequence) F_attribute_visibility_internal_d; -#endif // _di_utf8_print_width_ - -#ifdef __cplusplus -} // extern "C" -#endif - -#endif // _PRIVATE_utf8_print_h diff --git a/level_3/utf8/c/private-utf8.c b/level_3/utf8/c/private-utf8.c index 65b2e5bc2..d7fbb0d3b 100644 --- a/level_3/utf8/c/private-utf8.c +++ b/level_3/utf8/c/private-utf8.c @@ -1,6 +1,5 @@ #include "utf8.h" #include "private-common.h" -#include "private-print.h" #include "private-utf8.h" #include "private-utf8_bytesequence.h" #include "private-utf8_codepoint.h" @@ -10,7 +9,7 @@ extern "C" { #endif #ifndef _di_utf8_process_text_ - f_status_t utf8_process_text(utf8_data_t * const data, f_string_static_t text) { + f_status_t utf8_process_text(fll_program_data_t * const main, utf8_setting_t * const setting, f_string_static_t text) { if (!text.used) return F_true; @@ -20,38 +19,39 @@ extern "C" { utf8_process_text_width(&text); - flockfile(data->file.stream); + flockfile(main->output.to.stream); for (; text.string[0] && F_status_is_error_not(status); ) { - if (!((++data->main->signal_check) % utf8_signal_check_d)) { - if (fll_program_standard_signal_received(data->main)) { - utf8_print_signal_received(data, status); + if (!((++main->signal_check) % utf8_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + utf8_print_signal_received(main, setting, status); status = F_status_set_error(F_interrupt); break; } - data->main->signal_check = 0; + main->signal_check = 0; } status = F_none; - if (data->mode & utf8_mode_from_bytesequence_d) { - status = utf8_convert_bytesequence(data, text); + if (setting->mode & utf8_mode_from_bytesequence_e) { + status = utf8_convert_bytesequence(main, setting, text); } else { - status = utf8_detect_codepoint(data, text, &mode_codepoint); + status = utf8_detect_codepoint(main, setting, text, &mode_codepoint); if (F_status_is_error(status)) { - fll_error_print(data->main->error, F_status_set_fine(status), "utf8_detect_codepoint", F_true); + utf8_print_line_first(setting, main->error, F_true); + fll_error_print(main->error, F_status_set_fine(status), "utf8_detect_codepoint", F_true); break; } if (F_status_is_fine(status) && status != F_next) { - status = utf8_convert_codepoint(data, text, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, text, &mode_codepoint); } } @@ -63,7 +63,7 @@ extern "C" { utf8_process_text_width(&text); } // for - if (F_status_is_error_not(status) && !(data->mode & utf8_mode_from_bytesequence_d)) { + if (F_status_is_error_not(status) && !(setting->mode & utf8_mode_from_bytesequence_e)) { if (mode_codepoint != utf8_codepoint_mode_ready_e && mode_codepoint != utf8_codepoint_mode_end_e && mode_codepoint != utf8_codepoint_mode_bad_end_e && mode_codepoint != utf8_codepoint_mode_raw_end_e) { if (mode_codepoint == utf8_codepoint_mode_number_e) { mode_codepoint = utf8_codepoint_mode_end_e; @@ -79,29 +79,21 @@ extern "C" { text.used = 0; if (mode_codepoint == utf8_codepoint_mode_raw_number_e) { - status = utf8_convert_raw(data, text, &mode_codepoint); + status = utf8_convert_raw(main, setting, text, &mode_codepoint); } else { - status = utf8_convert_codepoint(data, text, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, text, &mode_codepoint); } } } if (F_status_is_error(status)) { - funlockfile(data->file.stream); + funlockfile(main->output.to.stream); return status; } - if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_none_e) { - - // When headers are printed, they are printed with a newline so only print this newline when separate is used without headers being printed. - if (data->main->parameters.array[utf8_parameter_headers_e].result == f_console_result_none_e && data->main->parameters.array[utf8_parameter_separate_e].result == f_console_result_found_e) { - f_print_dynamic_raw(f_string_eol_s, data->file.stream); - } - } - - funlockfile(data->file.stream); + funlockfile(main->output.to.stream); return valid; } diff --git a/level_3/utf8/c/private-utf8.h b/level_3/utf8/c/private-utf8.h index 1673b2733..6c6aca578 100644 --- a/level_3/utf8/c/private-utf8.h +++ b/level_3/utf8/c/private-utf8.h @@ -15,8 +15,10 @@ extern "C" { /** * Convert the text from one format to other another format or verify text. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param text * This represent a single text data. * This text is NULL terminated and can therefore not contain any NULLs. @@ -36,7 +38,7 @@ extern "C" { * @see utf8_signal_received() */ #ifndef _di_utf8_process_text_ - extern f_status_t utf8_process_text(utf8_data_t * const data, f_string_static_t text) F_attribute_visibility_internal_d; + extern f_status_t utf8_process_text(fll_program_data_t * const main, utf8_setting_t * const setting, f_string_static_t text) F_attribute_visibility_internal_d; #endif // _di_utf8_process_text_ /** diff --git a/level_3/utf8/c/private-utf8_bytesequence.c b/level_3/utf8/c/private-utf8_bytesequence.c index dd18133b2..6f454ce89 100644 --- a/level_3/utf8/c/private-utf8_bytesequence.c +++ b/level_3/utf8/c/private-utf8_bytesequence.c @@ -1,6 +1,5 @@ #include "utf8.h" #include "private-common.h" -#include "private-print.h" #include "private-utf8.h" #include "private-utf8_bytesequence.h" #include "private-utf8_codepoint.h" @@ -10,7 +9,7 @@ extern "C" { #endif #ifndef _di_utf8_convert_bytesequence_ - f_status_t utf8_convert_bytesequence(utf8_data_t * const data, const f_string_static_t sequence) { + f_status_t utf8_convert_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) { f_status_t status = F_none; bool valid_not = F_false; @@ -30,25 +29,25 @@ extern "C" { if (status == F_failure || status == F_utf_not || status == F_complete_not_utf || status == F_utf_fragment || status == F_valid_not) { valid_not = F_true; - utf8_print_character_invalid(data, sequence); + utf8_print_character_invalid(main, setting, sequence); } else { status = F_status_set_error(status); - utf8_print_error_decode(data, status, sequence); + utf8_print_error_decode(main, setting, status, sequence); return status; } } - else if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_none_e) { - if (data->mode & utf8_mode_to_bytesequence_d) { - utf8_print_bytesequence(data, sequence); + else if (!(setting->flag & utf8_main_flag_verify_e)) { + if (setting->mode & utf8_mode_to_bytesequence_e) { + utf8_print_bytesequence(main, setting, sequence); } - else if (data->mode & utf8_mode_to_codepoint_d) { - utf8_print_codepoint(data, codepoint); + else if (setting->mode & utf8_mode_to_codepoint_e) { + utf8_print_codepoint(main, setting, codepoint); } else { - utf8_print_combining_or_width(data, sequence); + utf8_print_combining_or_width(main, setting, sequence); } } @@ -59,7 +58,7 @@ extern "C" { #endif // _di_utf8_convert_bytesequence_ #ifndef _di_utf8_process_file_bytesequence_ - f_status_t utf8_process_file_bytesequence(utf8_data_t * const data, const f_file_t file) { + f_status_t utf8_process_file_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_file_t file) { f_status_t status = F_none; @@ -74,45 +73,45 @@ extern "C" { f_string_static_t sequence = macro_f_string_static_t_initialize(block, 0, 4); do { - status = f_file_stream_read_block(file, &data->buffer); + status = f_file_stream_read_block(file, &setting->buffer); - if (status == F_none_eof && !data->buffer.used) break; + if (status == F_none_eof && !setting->buffer.used) break; - for (i = 0; F_status_is_fine(status) && i < data->buffer.used; ) { + for (i = 0; F_status_is_fine(status) && i < setting->buffer.used; ) { - if (!((++data->main->signal_check) % utf8_signal_check_d)) { - if (fll_program_standard_signal_received(data->main)) { - utf8_print_signal_received(data, status); + if (!((++main->signal_check) % utf8_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + utf8_print_signal_received(main, setting, status); status = F_interrupt; break; } - data->main->signal_check = 0; + main->signal_check = 0; } status = F_none; // Get the current width only when processing a new block. if (next) { - sequence.used = macro_f_utf_byte_width(data->buffer.string[i]); + sequence.used = macro_f_utf_byte_width(setting->buffer.string[i]); next = F_false; } - for (; j < sequence.used && i < data->buffer.used; ++j, ++i) { - sequence.string[j] = data->buffer.string[i]; + for (; j < sequence.used && i < setting->buffer.used; ++j, ++i) { + sequence.string[j] = setting->buffer.string[i]; } // for if (j == sequence.used) { - if (data->mode & utf8_mode_from_bytesequence_d) { - status = utf8_convert_bytesequence(data, sequence); + if (setting->mode & utf8_mode_from_bytesequence_e) { + status = utf8_convert_bytesequence(main, setting, sequence); } else { - status = utf8_detect_codepoint(data, sequence, &mode_codepoint); + status = utf8_detect_codepoint(main, setting, sequence, &mode_codepoint); if (F_status_is_fine(status) && status != F_next) { - status = utf8_convert_codepoint(data, sequence, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, sequence, &mode_codepoint); } } @@ -126,7 +125,7 @@ extern "C" { } // for i = 0; - data->buffer.used = 0; + setting->buffer.used = 0; } while (F_status_is_fine(status) && status != F_interrupt); @@ -134,14 +133,14 @@ extern "C" { if (F_status_is_error_not(status) && status != F_interrupt && next == F_false) { sequence.used = j; - if (data->mode & utf8_mode_from_bytesequence_d) { - status = utf8_convert_bytesequence(data, sequence); + if (setting->mode & utf8_mode_from_bytesequence_e) { + status = utf8_convert_bytesequence(main, setting, sequence); } else { - status = utf8_detect_codepoint(data, sequence, &mode_codepoint); + status = utf8_detect_codepoint(main, setting, sequence, &mode_codepoint); if (F_status_is_fine(status) && status != F_next) { - status = utf8_convert_codepoint(data, sequence, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, sequence, &mode_codepoint); } } @@ -150,7 +149,7 @@ extern "C" { } } - data->buffer.used = 0; + setting->buffer.used = 0; if (F_status_is_error(status) || status == F_interrupt) return status; diff --git a/level_3/utf8/c/private-utf8_bytesequence.h b/level_3/utf8/c/private-utf8_bytesequence.h index 15eee7e42..c2c662577 100644 --- a/level_3/utf8/c/private-utf8_bytesequence.h +++ b/level_3/utf8/c/private-utf8_bytesequence.h @@ -17,8 +17,10 @@ extern "C" { * * This automatically determines the output format and is also handles the verify process. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param sequence * A byte sequences representing a single character to convert. * This does not stop on NULL and will process all text until sequence.used. @@ -32,14 +34,16 @@ extern "C" { * Errors (with error bit) from: f_utf_unicode_to() */ #ifndef _di_utf8_convert_bytesequence_ - extern f_status_t utf8_convert_bytesequence(utf8_data_t * const data, const f_string_static_t sequence) F_attribute_visibility_internal_d; + extern f_status_t utf8_convert_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t sequence) F_attribute_visibility_internal_d; #endif // _di_utf8_convert_bytesequence_ /** * Process file as a bytesequence input, handling conversion or verification as appropriate. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param file * The file stream to process. * This file may contain NULLs. @@ -57,7 +61,7 @@ extern "C" { * @see utf8_detect_codepoint() */ #ifndef _di_utf8_process_file_bytesequence_ - extern f_status_t utf8_process_file_bytesequence(utf8_data_t * const data, const f_file_t file) F_attribute_visibility_internal_d; + extern f_status_t utf8_process_file_bytesequence(fll_program_data_t * const main, utf8_setting_t * const setting, const f_file_t file) F_attribute_visibility_internal_d; #endif // _di_utf8_process_file_bytesequence_ #ifdef __cplusplus diff --git a/level_3/utf8/c/private-utf8_codepoint.c b/level_3/utf8/c/private-utf8_codepoint.c index f96c43d99..ddf0956d2 100644 --- a/level_3/utf8/c/private-utf8_codepoint.c +++ b/level_3/utf8/c/private-utf8_codepoint.c @@ -1,6 +1,5 @@ #include "utf8.h" #include "private-common.h" -#include "private-print.h" #include "private-utf8.h" #include "private-utf8_bytesequence.h" #include "private-utf8_codepoint.h" @@ -10,26 +9,26 @@ extern "C" { #endif #ifndef _di_utf8_convert_codepoint_ - f_status_t utf8_convert_codepoint(utf8_data_t * const data, const f_string_static_t unicode, uint8_t *mode) { + f_status_t utf8_convert_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t unicode, uint8_t *mode) { f_status_t status = F_none; bool valid_not = F_false; if (*mode != utf8_codepoint_mode_end_e) { - if (data->text.used + unicode.used >= data->text.size) { - status = f_string_dynamic_increase_by(utf8_default_allocation_step_d, &data->text); + if (setting->text.used + unicode.used >= setting->text.size) { + status = f_string_dynamic_increase_by(utf8_default_allocation_step_d, &setting->text); if (F_status_is_error(status)) return status; } for (f_array_length_t i = 0; i < unicode.used; ++i) { - data->text.string[data->text.used++] = unicode.string[i]; + setting->text.string[setting->text.used++] = unicode.string[i]; } // for } if (*mode == utf8_codepoint_mode_end_e) { uint32_t codepoint = 0; - status = f_utf_unicode_string_to(data->text.string, data->text.used, &codepoint); + status = f_utf_unicode_string_to(setting->text.string, setting->text.used, &codepoint); if (F_status_is_error(status)) { status = F_status_set_fine(status); @@ -37,19 +36,19 @@ extern "C" { if (status == F_failure || status == F_utf_not || status == F_complete_not_utf || status == F_utf_fragment || status == F_valid_not) { valid_not = F_true; - utf8_print_character_invalid(data, unicode); + utf8_print_character_invalid(main, setting, unicode); } else { status = F_status_set_error(status); - utf8_print_error_decode(data, status, unicode); + utf8_print_error_decode(main, setting, status, unicode); return status; } } - else if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_none_e) { - if (data->mode & utf8_mode_to_codepoint_d) { - utf8_print_codepoint(data, codepoint); + else if (!(setting->flag & utf8_main_flag_verify_e)) { + if (setting->mode & utf8_mode_to_codepoint_e) { + utf8_print_codepoint(main, setting, codepoint); } else { f_char_t byte[4] = { 0, 0, 0, 0 }; @@ -58,23 +57,23 @@ extern "C" { status = f_utf_unicode_from(codepoint, 4, &unicode.string); if (F_status_is_error(status)) { - if (data->mode & utf8_mode_to_bytesequence_d) { - utf8_print_error_encode(data, status, codepoint); + if (setting->mode & utf8_mode_to_bytesequence_e) { + utf8_print_error_encode(main, setting, status, codepoint); } else { - utf8_print_error_combining_or_width(data); + utf8_print_error_combining_or_width(main, setting); } } - else if (data->mode & utf8_mode_to_bytesequence_d) { + else if (setting->mode & utf8_mode_to_bytesequence_e) { status = F_none; unicode.used = macro_f_utf_byte_width(unicode.string[0]); - utf8_print_bytesequence(data, unicode); + utf8_print_bytesequence(main, setting, unicode); } else { status = F_none; - utf8_print_combining_or_width(data, unicode); + utf8_print_combining_or_width(main, setting, unicode); } } } @@ -82,14 +81,14 @@ extern "C" { else if (*mode == utf8_codepoint_mode_bad_end_e) { status = F_none; - utf8_print_character_invalid(data, unicode); + utf8_print_character_invalid(main, setting, unicode); } else { return F_none; } *mode = utf8_codepoint_mode_ready_e; - data->text.used = 0; + setting->text.used = 0; if (valid_not || F_status_is_error(status)) { return F_utf_not; @@ -100,19 +99,19 @@ extern "C" { #endif // _di_utf8_convert_codepoint_ #ifndef _di_utf8_convert_raw_ - f_status_t utf8_convert_raw(utf8_data_t * const data, const f_string_static_t hex, uint8_t *mode) { + f_status_t utf8_convert_raw(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t hex, uint8_t *mode) { f_status_t status = F_none; bool valid_not = F_false; if (*mode != utf8_codepoint_mode_raw_end_e) { - if (data->text.used + hex.used >= data->text.size) { - status = f_string_dynamic_increase_by(utf8_default_allocation_step_d, &data->text); + if (setting->text.used + hex.used >= setting->text.size) { + status = f_string_dynamic_increase_by(utf8_default_allocation_step_d, &setting->text); if (F_status_is_error(status)) return status; } for (f_array_length_t i = 0; i < hex.used; ++i) { - data->text.string[data->text.used++] = hex.string[i]; + setting->text.string[setting->text.used++] = hex.string[i]; } // for } @@ -122,7 +121,7 @@ extern "C" { { f_number_unsigned_t number = 0; - status = fl_conversion_dynamic_to_unsigned_detect(fl_conversion_data_base_10_c, data->text, &number); + status = fl_conversion_dynamic_to_unsigned_detect(fl_conversion_data_base_10_c, setting->text, &number); raw = (f_utf_char_t) number; } @@ -133,47 +132,47 @@ extern "C" { if (status == F_number || status == F_utf_not || status == F_complete_not_utf || status == F_utf_fragment || status == F_number_decimal || status == F_number_negative || status == F_number_positive || status == F_number_overflow) { valid_not = F_true; - utf8_print_character_invalid(data, hex); + utf8_print_character_invalid(main, setting, hex); } else { status = F_status_set_error(status); - utf8_print_error_decode(data, status, hex); + utf8_print_error_decode(main, setting, status, hex); return status; } } - else if (data->main->parameters.array[utf8_parameter_verify_e].result == f_console_result_none_e) { + else if (!(setting->flag & utf8_main_flag_verify_e)) { // The width actually includes the leading '0x', which is not part of the width of the digit in binary form. - uint8_t width = data->text.used > 1 ? (data->text.used - 2) / 2 : 0; + uint8_t width = setting->text.used > 1 ? (setting->text.used - 2) / 2 : 0; - if ((data->text.used - 2) % 2) { + if ((setting->text.used - 2) % 2) { ++width; } - if (data->mode & utf8_mode_to_bytesequence_d) { - utf8_print_raw_bytesequence(data, raw, width); + if (setting->mode & utf8_mode_to_bytesequence_e) { + utf8_print_raw_bytesequence(main, setting, raw, width); } - else if (data->mode & utf8_mode_to_codepoint_d) { - utf8_print_raw_codepoint(data, data->text); + else if (setting->mode & utf8_mode_to_codepoint_e) { + utf8_print_raw_codepoint(main, setting, setting->text); } else { - utf8_print_raw_combining_or_width(data, width); + utf8_print_raw_combining_or_width(main, setting, width); } } } else if (*mode == utf8_codepoint_mode_bad_end_e) { status = F_none; - utf8_print_character_invalid(data, hex); + utf8_print_character_invalid(main, setting, hex); } else { return F_none; } *mode = utf8_codepoint_mode_ready_e; - data->text.used = 0; + setting->text.used = 0; if (valid_not || F_status_is_error(status)) { return F_valid_not; @@ -184,7 +183,7 @@ extern "C" { #endif // _di_utf8_convert_raw_ #ifndef _di_utf8_detect_codepoint_ - f_status_t utf8_detect_codepoint(utf8_data_t * const data, const f_string_static_t unicode, uint8_t *mode) { + f_status_t utf8_detect_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t unicode, uint8_t *mode) { // Skip past NULL. if (!unicode.string[0]) { @@ -265,11 +264,11 @@ extern "C" { } else if (unicode.string[0] == f_string_ascii_u_s.string[0] || unicode.string[0] == f_string_ascii_U_s.string[0]) { *mode = utf8_codepoint_mode_begin_e; - data->text.used = 0; + setting->text.used = 0; } else if (unicode.string[0] == f_string_ascii_0_s.string[0]) { *mode = utf8_codepoint_mode_raw_begin_e; - data->text.used = 0; + setting->text.used = 0; } else { *mode = utf8_codepoint_mode_bad_e; @@ -308,7 +307,7 @@ extern "C" { #endif // _di_utf8_detect_codepoint_ #ifndef _di_utf8_process_file_codepoint_ - f_status_t utf8_process_file_codepoint(utf8_data_t * const data, const f_file_t file) { + f_status_t utf8_process_file_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_file_t file) { f_status_t status = F_none; bool valid = F_true; @@ -322,21 +321,21 @@ extern "C" { f_string_static_t sequence = macro_f_string_static_t_initialize(block, 0, 0); do { - status = f_file_stream_read_block(file, &data->buffer); + status = f_file_stream_read_block(file, &setting->buffer); - if (status == F_none_eof && !data->buffer.used) { + if (status == F_none_eof && !setting->buffer.used) { // Handle complete character, which must be explicitly set to end in this situation. if (mode_codepoint == utf8_codepoint_mode_number_e || mode_codepoint == utf8_codepoint_mode_raw_number_e) { if (mode_codepoint == utf8_codepoint_mode_number_e) { mode_codepoint = utf8_codepoint_mode_end_e; - status = utf8_convert_codepoint(data, sequence, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, sequence, &mode_codepoint); } else if (mode_codepoint == utf8_codepoint_mode_raw_number_e) { mode_codepoint = utf8_codepoint_mode_raw_end_e; - status = utf8_convert_raw(data, sequence, &mode_codepoint); + status = utf8_convert_raw(main, setting, sequence, &mode_codepoint); // Raw mode represents an invalid Unicode sequence. valid = F_false; @@ -351,48 +350,48 @@ extern "C" { break; } - for (i = 0; F_status_is_fine(status) && i < data->buffer.used; ) { + for (i = 0; F_status_is_fine(status) && i < setting->buffer.used; ) { - if (!((++data->main->signal_check) % utf8_signal_check_d)) { - if (fll_program_standard_signal_received(data->main)) { - utf8_print_signal_received(data, status); + if (!((++main->signal_check) % utf8_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + utf8_print_signal_received(main, setting, status); status = F_interrupt; break; } - data->main->signal_check = 0; + main->signal_check = 0; } status = F_none; // Get the current width only when processing a new block. if (next) { - sequence.used = macro_f_utf_byte_width(data->buffer.string[i]); + sequence.used = macro_f_utf_byte_width(setting->buffer.string[i]); next = F_false; } - for (; j < sequence.used && i < data->buffer.used; ++j, ++i) { - sequence.string[j] = data->buffer.string[i]; + for (; j < sequence.used && i < setting->buffer.used; ++j, ++i) { + sequence.string[j] = setting->buffer.string[i]; } // for if (j >= sequence.used) { - if (data->mode & utf8_mode_from_bytesequence_d) { - status = utf8_convert_bytesequence(data, sequence); + if (setting->mode & utf8_mode_from_bytesequence_e) { + status = utf8_convert_bytesequence(main, setting, sequence); } else { - status = utf8_detect_codepoint(data, sequence, &mode_codepoint); + status = utf8_detect_codepoint(main, setting, sequence, &mode_codepoint); if (F_status_is_fine(status) && status != F_next) { if (mode_codepoint == utf8_codepoint_mode_raw_begin_e || mode_codepoint == utf8_codepoint_mode_raw_number_e || mode_codepoint == utf8_codepoint_mode_raw_end_e) { - status = utf8_convert_raw(data, sequence, &mode_codepoint); + status = utf8_convert_raw(main, setting, sequence, &mode_codepoint); // Raw mode represents an invalid Unicode sequence. valid = F_false; } else { - status = utf8_convert_codepoint(data, sequence, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, sequence, &mode_codepoint); } } } @@ -406,7 +405,7 @@ extern "C" { } } // for - data->buffer.used = 0; + setting->buffer.used = 0; } while (F_status_is_fine(status) && status != F_interrupt); @@ -414,21 +413,21 @@ extern "C" { if (F_status_is_error_not(status) && status != F_interrupt && next == F_false) { sequence.used = j; - if (data->mode & utf8_mode_from_bytesequence_d) { - status = utf8_convert_bytesequence(data, sequence); + if (setting->mode & utf8_mode_from_bytesequence_e) { + status = utf8_convert_bytesequence(main, setting, sequence); } else { - status = utf8_detect_codepoint(data, sequence, &mode_codepoint); + status = utf8_detect_codepoint(main, setting, sequence, &mode_codepoint); if (F_status_is_fine(status) && status != F_next) { if (mode_codepoint == utf8_codepoint_mode_raw_begin_e || mode_codepoint == utf8_codepoint_mode_raw_number_e || mode_codepoint == utf8_codepoint_mode_raw_end_e) { - status = utf8_convert_raw(data, sequence, &mode_codepoint); + status = utf8_convert_raw(main, setting, sequence, &mode_codepoint); // Raw mode represents an invalid Unicode sequence. valid = F_false; } else { - status = utf8_convert_codepoint(data, sequence, &mode_codepoint); + status = utf8_convert_codepoint(main, setting, sequence, &mode_codepoint); } } } @@ -438,7 +437,7 @@ extern "C" { } } - data->buffer.used = 0; + setting->buffer.used = 0; if (F_status_is_error(status) || status == F_interrupt) return status; diff --git a/level_3/utf8/c/private-utf8_codepoint.h b/level_3/utf8/c/private-utf8_codepoint.h index 17c122d65..360e75b43 100644 --- a/level_3/utf8/c/private-utf8_codepoint.h +++ b/level_3/utf8/c/private-utf8_codepoint.h @@ -17,8 +17,10 @@ extern "C" { * * This automatically determines the output format and also handles the verify process. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param unicode * A set of bytes representing a single codepoint character to process. * @param mode @@ -35,7 +37,7 @@ extern "C" { * @see f_utf_unicode_to() */ #ifndef _di_utf8_convert_codepoint_ - extern f_status_t utf8_convert_codepoint(utf8_data_t * const data, const f_string_static_t unicode, uint8_t *mode) F_attribute_visibility_internal_d; + extern f_status_t utf8_convert_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t unicode, uint8_t *mode) F_attribute_visibility_internal_d; #endif // _di_utf8_convert_codepoint_ /** @@ -43,8 +45,10 @@ extern "C" { * * This automatically determines the output format and also handles the verify process. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param hex * A set of bytes representing hexidecimal digits of a character to process. * @param mode @@ -61,14 +65,16 @@ extern "C" { * @see fl_conversion_dynamic_to_unsigned_detect() */ #ifndef _di_utf8_convert_raw_ - extern f_status_t utf8_convert_raw(utf8_data_t * const data, const f_string_static_t hex, uint8_t *mode) F_attribute_visibility_internal_d; + extern f_status_t utf8_convert_raw(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t hex, uint8_t *mode) F_attribute_visibility_internal_d; #endif // _di_utf8_convert_raw_ /** * Detect a codepoint character. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param unicode * A set of bytes representing a single codepoint character to process. * @param mode @@ -82,14 +88,16 @@ extern "C" { * Errors (with error bit) from: f_utf_is_whitespace() */ #ifndef _di_utf8_detect_codepoint_ - extern f_status_t utf8_detect_codepoint(utf8_data_t * const data, const f_string_static_t unicode, uint8_t *mode) F_attribute_visibility_internal_d; + extern f_status_t utf8_detect_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_string_static_t unicode, uint8_t *mode) F_attribute_visibility_internal_d; #endif // _di_utf8_detect_codepoint_ /** * Process file as a codepoint input, handling conversion or verification as appropriate. * - * @param data - * The program data. + * @param main + * The main program data. + * @param setting + * The main program settings. * @param file * The file stream to process. * This file may contain NULLs. @@ -107,7 +115,7 @@ extern "C" { * @see utf8_detect_codepoint() */ #ifndef _di_utf8_process_file_codepoint_ - extern f_status_t utf8_process_file_codepoint(utf8_data_t * const data, const f_file_t file) F_attribute_visibility_internal_d; + extern f_status_t utf8_process_file_codepoint(fll_program_data_t * const main, utf8_setting_t * const setting, const f_file_t file) F_attribute_visibility_internal_d; #endif // _di_utf8_process_file_codepoint_ #ifdef __cplusplus diff --git a/level_3/utf8/c/utf8.c b/level_3/utf8/c/utf8.c index eef2f33db..ad93caeb5 100644 --- a/level_3/utf8/c/utf8.c +++ b/level_3/utf8/c/utf8.c @@ -1,6 +1,5 @@ #include "utf8.h" #include "private-common.h" -#include "private-print.h" #include "private-utf8.h" #include "private-utf8_bytesequence.h" #include "private-utf8_codepoint.h" @@ -9,478 +8,199 @@ extern "C" { #endif -#ifndef _di_utf8_print_help_ - f_status_t utf8_print_help(const f_file_t file, const f_color_context_t context) { - - flockfile(file.stream); - - fll_program_print_help_header(file, context, utf8_program_name_long_s, utf8_program_version_s); - - fll_program_print_help_option(file, context, f_console_standard_short_help_s, f_console_standard_long_help_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print this help message."); - fll_program_print_help_option(file, context, f_console_standard_short_dark_s, f_console_standard_long_dark_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on dark backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_light_s, f_console_standard_long_light_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Output using colors that show up better on light backgrounds."); - fll_program_print_help_option(file, context, f_console_standard_short_no_color_s, f_console_standard_long_no_color_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, "Do not print using color."); - fll_program_print_help_option(file, context, f_console_standard_short_quiet_s, f_console_standard_long_quiet_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, silencing most output."); - fll_program_print_help_option(file, context, f_console_standard_short_error_s, f_console_standard_long_error_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Decrease verbosity, using only error output."); - fll_program_print_help_option(file, context, f_console_standard_short_normal_s, f_console_standard_long_normal_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Set verbosity to normal."); - fll_program_print_help_option(file, context, f_console_standard_short_verbose_s, f_console_standard_long_verbose_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Increase verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_debug_s, f_console_standard_long_debug_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Enable debugging, significantly increasing verbosity beyond normal output."); - fll_program_print_help_option(file, context, f_console_standard_short_version_s, f_console_standard_long_version_s, f_console_symbol_short_disable_s, f_console_symbol_long_disable_s, " Print only the version number."); - - f_print_dynamic_raw(f_string_eol_s, file.stream); - - fll_program_print_help_option(file, context, utf8_short_from_bytesequence_s, utf8_long_from_bytesequence_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "The expected input format is byte sequence (character data)."); - fll_program_print_help_option(file, context, utf8_short_from_codepoint_s, utf8_long_from_codepoint_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The expected input format is codepoint (such as U+0000)."); - fll_program_print_help_option(file, context, utf8_short_from_file_s, utf8_long_from_file_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Use the given file as the input source."); - - f_print_dynamic_raw(f_string_eol_s, file.stream); - - fll_program_print_help_option(file, context, utf8_short_to_bytesequence_s, utf8_long_to_bytesequence_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "The output format is byte sequence (character data)."); - fll_program_print_help_option(file, context, utf8_short_to_codepoint_s, utf8_long_to_codepoint_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The output format is codepoint (such as U+0000)."); - fll_program_print_help_option(file, context, utf8_short_to_combining_s, utf8_long_to_combining_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The output format is to print whether or not character is combining or not."); - fll_program_print_help_option(file, context, utf8_short_to_file_s, utf8_long_to_file_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Use the given file as the output destination."); - fll_program_print_help_option(file, context, utf8_short_to_width_s, utf8_long_to_width_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " The output format is to print the width of a character (either 0, 1, or 2)."); - - f_print_dynamic_raw(f_string_eol_s, file.stream); - - fll_program_print_help_option(file, context, utf8_short_headers_s, utf8_long_headers_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Print headers for each section (pipe, file, or parameter)."); - fll_program_print_help_option(file, context, utf8_short_separate_s, utf8_long_separate_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Separate characters by newlines (implied when printing headers)."); - fll_program_print_help_option(file, context, utf8_short_strip_invalid_s, utf8_long_strip_invalid_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, "Strip invalid Unicode characters (do not print invalid sequences)."); - fll_program_print_help_option(file, context, utf8_short_verify_s, utf8_long_verify_s, f_console_symbol_short_enable_s, f_console_symbol_long_enable_s, " Only perform verification of valid sequences."); - - fll_program_print_help_usage(file, context, utf8_program_name_s, utf8_program_help_parameters_s); - - fl_print_format(" The default behavior is to assume the expected input is byte sequence from the command line to be output to the screen as codepoints.%r%r", file.stream, f_string_eol_s, f_string_eol_s); - - fl_print_format(" Multiple input sources are allowed but only a single output destination is allowed.%r%r", file.stream, f_string_eol_s, f_string_eol_s); - - fl_print_format(" When using the parameter '%[%r%r%]', no data is printed and 0 is returned if valid or 1 is returned if invalid.%r%r", file.stream, context.set.notable, f_console_symbol_long_enable_s, utf8_long_verify_s, context.set.notable, f_string_eol_s, f_string_eol_s); - - fl_print_format(" When using the parameter '%[%r%r%]' with the parameter ", file.stream, context.set.notable, f_console_symbol_long_enable_s, utf8_long_to_combining_s, context.set.notable); - fl_print_format("'%[%r%r%]', the ", file.stream, context.set.notable, f_console_symbol_long_enable_s, utf8_long_to_width_s, context.set.notable); - fl_print_format("'%[%r%]' character is printed to represent the combining and the digits are used to represent widths.%r", file.stream, context.set.notable, utf8_string_combining_is_s, context.set.notable, f_string_eol_s); - fl_print_format(" The combining characters should be considered 1-width by themselves or 0-width when combined.%r%r", file.stream, f_string_eol_s, f_string_eol_s); - - funlockfile(file.stream); - - return F_none; - } -#endif // _di_utf8_print_help_ - #ifndef _di_utf8_main_ - f_status_t utf8_main(fll_program_data_t * const main, utf8_main_setting_t * const setting) { + void utf8_main(fll_program_data_t * const main, utf8_setting_t * const setting) { if (!main || !setting) { - if (main->error.verbosity != f_console_verbosity_quiet_e) { - fll_error_print(main->error, F_status_set_fine(status), "utf8_main", F_true); - fll_print_dynamic_raw(f_string_eol_s, main->message.to.stream); - } + utf8_print_line_first(setting, main->error, F_true); + fll_error_print(main->error, F_parameter, "utf8_main", F_true); + utf8_print_line_last(setting, main->error, F_true); - return F_status_set_error(F_paremeter); + return; } - utf8_data_t data = utf8_data_t_initialize; - data.main = main; - data.setting = setting; - data.argv = main->parameters.arguments.array; - f_status_t status = F_none; - - if (main->parameters.array[utf8_parameter_help_e].result == f_console_result_found_e) { - utf8_print_help(main->message.to, main->context); - - utf8_data_delete(&data); + if (F_status_is_error(setting->status)) { + utf8_print_line_last(setting, main->error, F_true); - return F_none; + return; } - if (main->parameters.array[utf8_parameter_version_e].result == f_console_result_found_e) { - fll_program_print_version(main->message.to, utf8_program_version_s); + setting->status = F_none; - utf8_data_delete(&data); + if (setting->flag & utf8_main_flag_help_e) { + utf8_print_help(setting, main->message.to, main->context); - return F_none; + return; } - if (F_status_is_error_not(status)) { - if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_additional_e) { - f_array_length_t i = 0; - f_array_length_t index = 0; + if (setting->flag & utf8_main_flag_version_e) { + fll_program_print_version(main->message.to, utf8_program_version_s); - for (; i < main->parameters.array[utf8_parameter_from_file_e].values.used; ++i) { + return; + } - index = main->parameters.array[utf8_parameter_from_file_e].values.array[i]; + f_status_t valid = F_true; - if (data.argv[index].used) { - if (f_file_exists(data.argv[index], F_true) != F_true) { - utf8_print_error_parameter_file_not_found(&data, F_true, data.argv[index]); + if (main->pipe & fll_program_data_pipe_input_e) { + const f_file_t file = macro_f_file_t_initialize(F_type_input_d, F_type_descriptor_input_d, F_file_flag_read_only_d, 32768, F_file_default_write_size_d); - if (F_status_is_error_not(status)) { - status = F_status_set_error(F_file_found_not); - } - } - } - else { - utf8_print_error_parameter_file_name_empty(&data, index); + utf8_print_section_header_pipe(main, setting); - if (F_status_is_error_not(status)) { - status = F_status_set_error(F_parameter); - } - } - } // for + if (setting->mode & utf8_mode_from_bytesequence_e) { + setting->status = utf8_process_file_bytesequence(main, setting, file); } - else if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_found_e) { - utf8_print_error_no_value(&data, utf8_long_from_file_s); - - status = F_status_set_error(F_parameter); + else { + setting->status = utf8_process_file_codepoint(main, setting, file); } - } - - bool valid = F_true; - - if (F_status_is_error_not(status)) { - if (main->parameters.array[utf8_parameter_to_file_e].result == f_console_result_additional_e) { - if (main->parameters.array[utf8_parameter_to_file_e].values.used > 1) { - utf8_print_error_parameter_file_to_too_many(&data); - - status = F_status_set_error(F_parameter); - } - else { - if (data.argv[main->parameters.array[utf8_parameter_to_file_e].values.array[0]].used) { - status = f_file_stream_open(data.argv[main->parameters.array[utf8_parameter_to_file_e].values.array[0]], f_file_open_mode_append_s, &data.file); - if (F_status_is_error(status)) { - fll_error_file_print(main->error, F_status_set_fine(status), "f_file_stream_open", F_true, data.argv[main->parameters.array[utf8_parameter_to_file_e].values.array[0]], f_file_operation_open_s, fll_error_file_type_file_e); - } + if (F_status_is_error_not(setting->status)) { + if (setting->mode & utf8_mode_to_bytesequence_e) { + if (setting->flag & utf8_main_flag_header_e) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); } - else { - utf8_print_error_parameter_file_name_empty(&data, main->parameters.array[utf8_parameter_to_file_e].values.array[0]); - - status = F_status_set_error(F_parameter); + else if ((setting->flag & utf8_main_flag_separate_e) && ((setting->flag & utf8_main_flag_file_from_e) || main->parameters.remaining.used)) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); } } } - else if (main->parameters.array[utf8_parameter_to_file_e].result == f_console_result_found_e) { - utf8_print_error_no_value(&data, utf8_long_to_file_s); - status = F_status_set_error(F_parameter); - } - else { - data.file = main->message.to; + if (F_status_is_error(setting->status) && F_status_set_fine(setting->status) != F_utf_fragment && F_status_set_fine(setting->status) != F_complete_not_utf) { + fll_error_file_print(main->error, F_status_set_fine(setting->status), setting->mode & utf8_mode_from_bytesequence_e ? "utf8_process_file_bytesequence" : "utf8_process_file_codepoint", F_true, f_string_empty_s, f_file_operation_process_s, fll_error_file_type_pipe_e); } } - if (F_status_is_error_not(status)) { - if (main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_none_e && !(main->process_pipe || main->parameters.remaining.used)) { - utf8_print_error_no_from(&data); - - status = F_status_set_error(F_parameter); - } - - if (!(data.mode & utf8_mode_to_bytesequence_d)) { - if (main->parameters.array[utf8_parameter_separate_e].result == f_console_result_found_e || main->parameters.array[utf8_parameter_headers_e].result == f_console_result_found_e) { - data.prepend = utf8_string_prepend_padding_s; - data.append = f_string_eol_s; - } - else { - data.prepend = f_string_space_s; - } - } - - data.valid_not = main->message.set->error; - } + if (F_status_is_error_not(setting->status) && setting->status != F_interrupt && (setting->flag & utf8_main_flag_file_from_e)) { + f_array_length_t i = 0; + f_array_length_t index = 0; - if (F_status_is_error_not(status)) { - status = F_none; + f_file_t file = macro_f_file_t_initialize(0, -1, F_file_flag_read_only_d, 32768, F_file_default_write_size_d); - if (main->process_pipe) { - f_file_t file = macro_f_file_t_initialize(0, -1, F_file_flag_read_only_d, 32768, F_file_default_write_size_d); + f_string_static_t * const args = main->parameters.arguments.array; - file.id = F_type_descriptor_input_d; - file.stream = F_type_input_d; + for (; i < main->parameters.array[utf8_parameter_from_file_e].values.used && setting->status != F_interrupt; ++i) { - utf8_print_section_header_pipe(&data); + if (!((++main->signal_check) % utf8_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + setting->status = F_status_set_error(F_interrupt); - if (data.mode & utf8_mode_from_bytesequence_d) { - status = utf8_process_file_bytesequence(&data, file); - } - else { - status = utf8_process_file_codepoint(&data, file); - } + break; + } - if (F_status_is_error(status) && F_status_set_fine(status) != F_utf_fragment && F_status_set_fine(status) != F_complete_not_utf) { - fll_error_file_print(main->error, F_status_set_fine(status), data.mode & utf8_mode_from_bytesequence_d ? "utf8_process_file_bytesequence" : "utf8_process_file_codepoint", F_true, f_string_empty_s, f_file_operation_process_s, fll_error_file_type_pipe_e); + main->signal_check = 0; } - } - - if (F_status_is_error_not(status) && status != F_interrupt && main->parameters.array[utf8_parameter_from_file_e].result == f_console_result_additional_e) { - f_array_length_t i = 0; - f_array_length_t index = 0; - f_file_t file = macro_f_file_t_initialize(0, -1, F_file_flag_read_only_d, 32768, F_file_default_write_size_d); + index = main->parameters.array[utf8_parameter_from_file_e].values.array[i]; - for (; i < main->parameters.array[utf8_parameter_from_file_e].values.used && status != F_interrupt; ++i) { + utf8_print_section_header_file(main, setting, args[index], i); - if (!((++main->signal_check) % utf8_signal_check_d)) { - if (fll_program_standard_signal_received(main)) { - status = F_status_set_error(F_interrupt); + setting->status = f_file_stream_open(args[index], f_string_empty_s, &file); - break; - } - - main->signal_check = 0; - } + if (F_status_is_error(setting->status)) { + fll_error_file_print(main->error, F_status_set_fine(setting->status), "f_file_stream_open", F_true, args[index], f_file_operation_open_s, fll_error_file_type_file_e); - index = main->parameters.array[utf8_parameter_from_file_e].values.array[i]; - - utf8_print_section_header_file(&data, data.argv[index]); - - status = f_file_stream_open(data.argv[index], f_string_empty_s, &file); + break; + } - if (F_status_is_error(status)) { - fll_error_file_print(main->error, F_status_set_fine(status), "f_file_stream_open", F_true, data.argv[index], f_file_operation_open_s, fll_error_file_type_file_e); + if (setting->mode & utf8_mode_from_bytesequence_e) { + setting->status = utf8_process_file_bytesequence(main, setting, file); + } + else { + setting->status = utf8_process_file_codepoint(main, setting, file); + } - break; - } + f_file_stream_flush(file); + f_file_stream_close(&file); - if (data.mode & utf8_mode_from_bytesequence_d) { - status = utf8_process_file_bytesequence(&data, file); - } - else { - status = utf8_process_file_codepoint(&data, file); + if (setting->flag & utf8_main_flag_verify_e) { + if (setting->status == F_false) { + valid = F_false; } + } - f_file_stream_flush(&file); - f_file_stream_close(&file); - - if (main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) { - if (status == F_false) { - valid = F_false; + if (F_status_is_error_not(setting->status)) { + if (setting->mode & utf8_mode_to_bytesequence_e) { + if (setting->flag & utf8_main_flag_header_e) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); } - } - - if (F_status_is_error(status) && F_status_set_fine(status) != F_utf_fragment && F_status_set_fine(status) != F_complete_not_utf) { - fll_error_file_print(main->error, F_status_set_fine(status), data.mode & utf8_mode_from_bytesequence_d ? "utf8_process_file_bytesequence" : "utf8_process_file_codepoint", F_true, data.argv[index], f_file_operation_process_s, fll_error_file_type_file_e); - - break; - } - } // for - } - - if (F_status_is_error_not(status) && status != F_interrupt && main->parameters.remaining.used) { - for (f_array_length_t i = 0; F_status_is_error_not(status) && i < main->parameters.remaining.used; ++i) { - - if (!((++main->signal_check) % utf8_signal_check_d)) { - if (fll_program_standard_signal_received(main)) { - status = F_status_set_error(F_interrupt); - - break; + else if ((setting->flag & utf8_main_flag_separate_e) && (main->parameters.remaining.used || i + 1 < main->parameters.array[utf8_parameter_from_file_e].values.used)) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); } - - main->signal_check = 0; } - - utf8_print_section_header_parameter(&data, main->parameters.remaining.array[i]); - - status = utf8_process_text(&data, data.argv[main->parameters.remaining.array[i]]); - - if (main->parameters.array[utf8_parameter_verify_e].result == f_console_result_found_e) { - if (status == F_false) { - valid = F_false; + else { + if (!(setting->flag & (utf8_main_flag_file_to_e | utf8_main_flag_header_e | utf8_main_flag_verify_e))) { + if (!(setting->flag & utf8_main_flag_separate_e)) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + } } } - } // for - } - } - - if (main->message.verbosity != f_console_verbosity_quiet_e && main->parameters.array[utf8_parameter_verify_e].result == f_console_result_none_e) { - if (status == F_interrupt) { - fflush(data.file.stream); - - if (data.file.stream != main->message.to.stream) { - fflush(main->message.to.stream); } - } - - fll_print_dynamic_raw(f_string_eol_s, main->message.to.stream); - } - - utf8_data_delete(&data); - - if (F_status_is_error(status) || status == F_interrupt) return status; - return valid; - } -#endif // _di_utf8_main_ - -#ifndef _di_utf8_main_setting_delete_ - f_status_t utf8_main_setting_delete(utf8_main_setting_t * const setting) { - - return F_none; - } -#endif // _di_utf8_main_setting_delete_ + if (F_status_is_error(setting->status) && F_status_set_fine(setting->status) != F_utf_fragment && F_status_set_fine(setting->status) != F_complete_not_utf) { + fll_error_file_print(main->error, F_status_set_fine(setting->status), setting->mode & utf8_mode_from_bytesequence_e ? "utf8_process_file_bytesequence" : "utf8_process_file_codepoint", F_true, args[index], f_file_operation_process_s, fll_error_file_type_file_e); -#ifndef _di_utf8_main_setting_load_ - f_status_t utf8_main_setting_load(const f_console_arguments_t arguments, fll_program_data_t * const main, utf8_main_setting_t * const setting) { - - f_status_t status = F_none; - - // Identify priority of color parameters. - { - f_console_parameter_id_t ids[3] = { utf8_parameter_no_color_e, utf8_parameter_light_e, utf8_parameter_dark_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 3); - - status = fll_program_parameter_process(arguments, choices, F_true, main); - - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process", F_true); - - return status; - } - } - - { - const verbosity[5] = { utf8_parameter_verbosity_quiet_e, utf8_parameter_verbosity_error_e, f_console_verbosity_normal_e, utf8_parameter_verbosity_verbose_e, utf8_parameter_verbosity_debug_e }; - f_console_parameter_id_t ids[5] = { utf8_parameter_verbosity_quiet_e, utf8_parameter_verbosity_error_e, utf8_parameter_verbosity_normal_e, utf8_parameter_verbosity_verbose_e, utf8_parameter_verbosity_debug_e }; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); - - status = fll_program_parameter_process_verbosity(choices, F_true, verbosity, main); - - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "fll_program_parameter_process_verbosity", F_true); - - return status; - } - } - - // Identify and prioritize from mode parameters. - { - f_console_parameter_id_t ids[2] = { utf8_parameter_from_bytesequence_e, utf8_parameter_from_codepoint_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 2); - - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); - - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); - - return status; - } - - if (choice == utf8_parameter_from_bytesequence_e) { - if (data.mode & utf8_mode_from_codepoint_d) { - data.mode -= utf8_mode_from_codepoint_d; + break; } - - data.mode |= utf8_mode_from_bytesequence_d; - } - else if (choice == utf8_parameter_from_codepoint_e) { - if (data.mode & utf8_mode_from_bytesequence_d) { - data.mode -= utf8_mode_from_bytesequence_d; - } - - data.mode |= utf8_mode_from_codepoint_d; - } + } // for } - // Identify and prioritize to mode parameters. - { - f_console_parameter_id_t ids[5] = { utf8_parameter_to_bytesequence_e, utf8_parameter_to_codepoint_e, utf8_parameter_to_combining_e, utf8_parameter_to_width_e }; - f_console_parameter_id_t choice = 0; - const f_console_parameter_ids_t choices = macro_f_console_parameter_ids_t_initialize(ids, 5); - - status = f_console_parameter_prioritize_right(main->parameters, choices, &choice); - - if (F_status_is_error(status)) { - fll_error_print(main->error, F_status_set_fine(status), "f_console_parameter_prioritize_right", F_true); - - return status; - } - - if (choice == utf8_parameter_to_bytesequence_e) { - if (data.mode & utf8_mode_to_codepoint_d) { - data.mode -= utf8_mode_to_codepoint_d; - } - - if (data.mode & utf8_mode_to_combining_d) { - data.mode -= utf8_mode_to_combining_d; - } - - if (data.mode & utf8_mode_to_width_d) { - data.mode -= utf8_mode_to_width_d; - } - - data.mode |= utf8_mode_to_bytesequence_d; - } - else if (choice == utf8_parameter_to_codepoint_e) { - if (data.mode & utf8_mode_to_bytesequence_d) { - data.mode -= utf8_mode_to_bytesequence_d; - } + if (F_status_is_error_not(setting->status) && setting->status != F_interrupt && main->parameters.remaining.used) { + for (f_array_length_t i = 0; F_status_is_error_not(setting->status) && i < main->parameters.remaining.used; ++i) { - if (data.mode & utf8_mode_to_combining_d) { - data.mode -= utf8_mode_to_combining_d; - } + if (!((++main->signal_check) % utf8_signal_check_d)) { + if (fll_program_standard_signal_received(main)) { + setting->status = F_status_set_error(F_interrupt); - if (data.mode & utf8_mode_to_width_d) { - data.mode -= utf8_mode_to_width_d; - } + break; + } - data.mode |= utf8_mode_to_codepoint_d; - } - else if (choice == utf8_parameter_to_combining_e) { - if (data.mode & utf8_mode_to_bytesequence_d) { - data.mode -= utf8_mode_to_bytesequence_d; + main->signal_check = 0; } - if (data.mode & utf8_mode_to_codepoint_d) { - data.mode -= utf8_mode_to_codepoint_d; - } + utf8_print_section_header_parameter(main, setting, main->parameters.remaining.array[i]); - // --to_width may be specified with --to_combining. - if (main->parameters.array[utf8_parameter_to_width_e].result == f_console_result_found_e) { - data.mode |= utf8_mode_to_width_d; - } + setting->status = utf8_process_text(main, setting, main->parameters.arguments.array[main->parameters.remaining.array[i]]); - data.mode |= utf8_mode_to_combining_d; - } - else if (choice == utf8_parameter_to_width_e) { - if (data.mode & utf8_mode_to_bytesequence_d) { - data.mode -= utf8_mode_to_bytesequence_d; + if (setting->mode & utf8_mode_to_bytesequence_e) { + if (setting->flag & utf8_main_flag_header_e) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + } + else if ((setting->flag & utf8_main_flag_separate_e) && i + 1 < main->parameters.remaining.used) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + } } - - if (data.mode & utf8_mode_to_codepoint_d) { - data.mode -= utf8_mode_to_codepoint_d; + else { + if (!(setting->flag & (utf8_main_flag_file_to_e | utf8_main_flag_header_e | utf8_main_flag_verify_e))) { + if (!(setting->flag & utf8_main_flag_separate_e)) { + fll_print_dynamic_raw(f_string_eol_s, main->output.to.stream); + } + } } - // --to_width may be specified with --to_combining. - if (main->parameters.array[utf8_parameter_to_combining_e].result == f_console_result_found_e) { - data.mode |= utf8_mode_to_combining_d; + if (setting->flag & utf8_main_flag_verify_e) { + if (setting->status == F_false) { + valid = F_false; + } } - - data.mode |= utf8_mode_to_width_d; - } + } // for } - return F_none; - } -#endif // _di_utf8_main_setting_load_ + if (F_status_is_error(setting->status)) { + utf8_print_line_last(setting, main->error, F_true); + } + else if (setting->status != F_interrupt) { + utf8_print_line_last(setting, main->message, F_true); + } -#ifndef _di_utf8_main_setting_unload_ - f_status_t utf8_main_setting_unload(fll_program_data_t * const main, utf8_main_setting_t * const setting) { + if (F_status_is_error(setting->status) || setting->status == F_interrupt) return; - if (data->file.stream) { - if (data->file.stream != main->message.stream && data->file.stream != main->output.stream && data->file.stream != main->error.stream && data->file.stream != main->warning.stream && data->file.stream != main->debug.stream) { - f_file_stream_flush(&data->file); - f_file_stream_close(&data->file); - } + if (setting->flag & utf8_main_flag_verify_e) { + setting->status = valid; } - else if (data->file.id != -1) { - if (data->file.id != main->message.id && data->file.id != main->output.id && data->file.id != main->error.id && data->file.id != main->warning.id && data->file.id != main->debug.id) { - f_file_flush(&data->file); - f_file_close(&data->file); - } + else { + setting->status = F_none; } } -#endif // _di_utf8_main_setting_unload_ +#endif // _di_utf8_main_ #ifdef __cplusplus } // extern "C" diff --git a/level_3/utf8/c/utf8.h b/level_3/utf8/c/utf8.h index 9d1697fc6..ffd1a5496 100644 --- a/level_3/utf8/c/utf8.h +++ b/level_3/utf8/c/utf8.h @@ -56,26 +56,12 @@ // UTF-8 includes. #include +#include #ifdef __cplusplus extern "C" { #endif -/** - * Print help. - * - * @param file - * The file to print to. - * @param context - * The color context settings. - * - * @return - * F_none on success. - */ -#ifndef _di_utf8_print_help_ - extern f_status_t utf8_print_help(const f_file_t file, const f_color_context_t context); -#endif // _di_utf8_print_help_ - /** * Execute main program. * @@ -90,69 +76,20 @@ extern "C" { * @param main * The main program data. * @param setting - * The main program setting data. + * The main program settings. * - * @return - * F_none on success. - * F_true on success when performing verification and verify passed. - * F_false on success when performing verification and verify failed. - * F_interrupt on (exit) signal received. + * This alters setting.status: + * F_none on success. + * F_true on success when performing verification and verify passed. + * F_false on success when performing verification and verify failed. + * F_interrupt on (exit) signal received. * - * F_parameter (with error bit) If main is NULL or setting is NULL. + * F_parameter (with error bit) if main is NULL or setting is NULL. */ #ifndef _di_utf8_main_ - extern f_status_t utf8_main(fll_program_data_t * const main, utf8_main_setting_t * const setting); + extern void utf8_main(fll_program_data_t * const main, utf8_setting_t * const setting); #endif // _di_utf8_main_ -/** - * Delete the program main setting data. - * - * @param setting - * The program main setting data. - * - * @return - * F_none on success. - */ -#ifndef _di_utf8_main_setting_delete_ - extern f_status_t utf8_main_setting_delete(utf8_main_setting_t * const setting); -#endif // _di_utf8_main_setting_delete_ - -/** - * Perform the standard program setting load process. - * - * @param arguments - * The parameters passed to the process (often referred to as command line arguments). - * @param main - * The main program data. - * @param setting - * The main program setting data. - * - * @return - * F_none on success. - * - * Errors (with error bit) from: fll_program_parameter_process(). - * - * @see fll_program_parameter_process() - */ -#ifndef _di_utf8_main_setting_load_ - extern f_status_t utf8_main_setting_load(const f_console_arguments_t arguments, fll_program_data_t * const main, utf8_main_setting_t * const setting); -#endif // _di_utf8_main_setting_load_ - -/** - * Perform the standard program setting unload process. - * - * @param main - * The main program data. - * @param setting - * The main program setting data. - * - * @return - * F_none on success. - */ -#ifndef _di_utf8_main_setting_unload_ - extern f_status_t utf8_main_setting_unload(fll_program_data_t * const main, utf8_main_setting_t * const setting); -#endif // _di_utf8_main_setting_unload_ - #ifdef __cplusplus } // extern "C" #endif diff --git a/level_3/utf8/data/build/settings b/level_3/utf8/data/build/settings index 2df3049bf..501819c48 100644 --- a/level_3/utf8/data/build/settings +++ b/level_3/utf8/data/build/settings @@ -3,7 +3,7 @@ build_name utf8 version_major 0 -version_minor 6 +version_minor 7 version_micro 0 version_file micro version_target minor @@ -22,11 +22,12 @@ build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion build_libraries-level -lfll_2 -lfll_1 -lfll_0 build_libraries-monolithic -lfll -build_sources_library utf8.c common.c private-common.c private-print.c private-utf8.c private-utf8_bytesequence.c private-utf8_codepoint.c +build_sources_library common.c print.c utf8.c +build_sources_library private-common.c private-utf8.c private-utf8_bytesequence.c private-utf8_codepoint.c build_sources_program main.c -build_sources_headers utf8.h common.h +build_sources_headers common.h print.h utf8.h build_script yes build_shared yes -- 2.47.3