]> Kevux Git Server - fll/commitdiff
Refactor: Redesign fl_string and fl_utf_string, relocating into f_compare, f_parse...
authorKevin Day <kevin@kevux.org>
Mon, 27 Mar 2023 02:11:20 +0000 (21:11 -0500)
committerKevin Day <kevin@kevux.org>
Mon, 27 Mar 2023 03:52:01 +0000 (22:52 -0500)
The fl_string and fl_utf_string projects only depend on the core projects.
They could easily be moved into the level_0 project directory.
The problem is that they cannot be part of the f_string project due to depending on f_utf.
The f_string project is before the f_utf.

The solution is to break the fl_string into three projects:
- f_compare
- f_parse
- f_rip

It just so happens that the fl_utf_string is in the same situation as fl_string.
Move fl_utf_string into these three projects as appropriate.

This adds some initial unit tests to f_compare.
I didn't have enough to to finish f_compare, let alone get to f_parse and f_rip.

198 files changed:
build/level_0/settings
build/level_1/settings
build/monolithic/settings
build/scripts/bootstrap-example.sh
build/scripts/test.sh
build/stand_alone/fake.config.h
build/stand_alone/fake.settings
level_0/f_compare/c/compare.c [new file with mode: 0644]
level_0/f_compare/c/compare.h [new file with mode: 0644]
level_0/f_compare/c/compare/private-utf.c [new file with mode: 0644]
level_0/f_compare/c/compare/private-utf.h [new file with mode: 0644]
level_0/f_compare/c/compare/utf.c [new file with mode: 0644]
level_0/f_compare/c/compare/utf.h [new file with mode: 0644]
level_0/f_compare/c/private-compare.c [moved from level_1/fl_string/c/private-string.c with 72% similarity]
level_0/f_compare/c/private-compare.h [new file with mode: 0644]
level_0/f_compare/data/build/defines [moved from level_1/fl_string/data/build/defines with 91% similarity]
level_0/f_compare/data/build/dependencies [moved from level_1/fl_string/data/build/dependencies with 100% similarity]
level_0/f_compare/data/build/dependencies-tests [new file with mode: 0644]
level_0/f_compare/data/build/fakefile [moved from level_1/fl_string/data/build/fakefile with 100% similarity]
level_0/f_compare/data/build/settings [new file with mode: 0644]
level_0/f_compare/data/build/settings-tests [new file with mode: 0644]
level_0/f_compare/data/build/testfile [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare-.c [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare-.h [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare-dynamic.c [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare-dynamic.h [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare-dynamic_string.c [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare-dynamic_string.h [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare.c [new file with mode: 0644]
level_0/f_compare/tests/unit/c/test-compare.h [new file with mode: 0644]
level_0/f_parse/c/parse.c [new file with mode: 0644]
level_0/f_parse/c/parse.h [new file with mode: 0644]
level_0/f_parse/c/parse/utf.c [new file with mode: 0644]
level_0/f_parse/c/parse/utf.h [new file with mode: 0644]
level_0/f_parse/data/build/defines [new file with mode: 0644]
level_0/f_parse/data/build/dependencies [new file with mode: 0644]
level_0/f_parse/data/build/dependencies-tests [new file with mode: 0644]
level_0/f_parse/data/build/fakefile [new file with mode: 0644]
level_0/f_parse/data/build/settings [moved from level_1/fl_string/data/build/settings with 89% similarity]
level_0/f_rip/c/private-rip.c [new file with mode: 0644]
level_0/f_rip/c/private-rip.h [new file with mode: 0644]
level_0/f_rip/c/rip.c [new file with mode: 0644]
level_0/f_rip/c/rip.h [new file with mode: 0644]
level_0/f_rip/c/rip/private-utf.c [new file with mode: 0644]
level_0/f_rip/c/rip/private-utf.h [new file with mode: 0644]
level_0/f_rip/c/rip/utf.c [new file with mode: 0644]
level_0/f_rip/c/rip/utf.h [new file with mode: 0644]
level_0/f_rip/data/build/defines [new file with mode: 0644]
level_0/f_rip/data/build/dependencies [new file with mode: 0644]
level_0/f_rip/data/build/dependencies-tests [new file with mode: 0644]
level_0/f_rip/data/build/fakefile [new file with mode: 0644]
level_0/f_rip/data/build/settings [new file with mode: 0644]
level_0/f_string/c/private-string.h
level_0/f_string/data/build/settings
level_1/fl_string/c/private-string.h [deleted file]
level_1/fl_string/c/string.c [deleted file]
level_1/fl_string/c/string.h [deleted file]
level_1/fl_utf/c/private-utf.c
level_1/fl_utf/c/private-utf.h
level_1/fl_utf/c/utf.c
level_1/fl_utf/c/utf.h
level_2/fll_execute/c/execute.h
level_2/fll_fss/c/fss.c
level_2/fll_fss/c/fss.h
level_2/fll_fss/c/fss/basic.h
level_2/fll_fss/c/fss/basic_list.h
level_2/fll_fss/c/fss/payload.c
level_2/fll_fss/c/fss/payload.h
level_2/fll_fss/data/build/dependencies
level_2/fll_fss/data/build/settings
level_2/fll_fss_status_string/c/fss_status_string.c
level_2/fll_fss_status_string/c/fss_status_string.h
level_2/fll_fss_status_string/data/build/dependencies
level_2/fll_fss_status_string/data/build/settings
level_2/fll_iki/c/iki.h
level_2/fll_program/c/program.c
level_2/fll_program/c/program.h
level_2/fll_program/data/build/dependencies
level_2/fll_program/data/build/settings
level_2/fll_status_string/c/status_string.c
level_2/fll_status_string/c/status_string.h
level_2/fll_status_string/data/build/dependencies
level_2/fll_status_string/data/build/settings
level_2/fll_status_string/data/build/settings-tests
level_3/byte_dump/c/byte_dump.h
level_3/byte_dump/data/build/dependencies
level_3/byte_dump/data/build/settings
level_3/control/c/common.c
level_3/control/c/control.h
level_3/control/c/private-control.c
level_3/control/data/build/dependencies
level_3/control/data/build/settings
level_3/controller/c/common.c
level_3/controller/c/controller.h
level_3/controller/c/controller/private-controller.c
level_3/controller/c/controller/private-controller.h
level_3/controller/c/entry/private-entry.c
level_3/controller/c/entry/private-entry.h
level_3/controller/c/process/private-process.c
level_3/controller/c/rule/private-rule.c
level_3/controller/c/rule/private-rule.h
level_3/controller/data/build/dependencies
level_3/controller/data/build/settings
level_3/fake/c/main/build/load.c
level_3/fake/c/main/common/print.c
level_3/fake/c/main/common/print.h
level_3/fake/c/main/fake.h
level_3/fake/c/main/make.c
level_3/fake/c/main/make.h
level_3/fake/c/main/make/load_fakefile.c
level_3/fake/c/main/make/operate.c
level_3/fake/c/main/make/operate.h
level_3/fake/c/main/make/operate_process_type.c
level_3/fake/c/main/make/operate_validate_type.c
level_3/fake/data/build/dependencies
level_3/fake/data/build/settings
level_3/firewall/c/firewall.c
level_3/firewall/c/firewall.h
level_3/firewall/c/private-firewall.c
level_3/firewall/data/build/dependencies
level_3/firewall/data/build/settings
level_3/fss_basic_list_read/c/fss_basic_list_read.c
level_3/fss_basic_list_read/c/fss_basic_list_read.h
level_3/fss_basic_list_read/c/private-read.c
level_3/fss_basic_list_read/c/private-read.h
level_3/fss_basic_list_read/data/build/dependencies
level_3/fss_basic_list_read/data/build/settings
level_3/fss_basic_read/c/fss_basic_read.c
level_3/fss_basic_read/c/fss_basic_read.h
level_3/fss_basic_read/c/private-read.c
level_3/fss_basic_read/c/private-read.h
level_3/fss_basic_read/data/build/dependencies
level_3/fss_basic_read/data/build/settings
level_3/fss_embedded_list_read/c/fss_embedded_list_read.c
level_3/fss_embedded_list_read/c/fss_embedded_list_read.h
level_3/fss_embedded_list_read/c/private-read.c
level_3/fss_embedded_list_read/data/build/dependencies
level_3/fss_embedded_list_read/data/build/settings
level_3/fss_extended_list_read/c/fss_extended_list_read.c
level_3/fss_extended_list_read/c/fss_extended_list_read.h
level_3/fss_extended_list_read/c/private-read.c
level_3/fss_extended_list_read/c/private-read.h
level_3/fss_extended_list_read/data/build/dependencies
level_3/fss_extended_list_read/data/build/settings
level_3/fss_extended_read/c/fss_extended_read.c
level_3/fss_extended_read/c/fss_extended_read.h
level_3/fss_extended_read/c/private-read.c
level_3/fss_extended_read/c/private-read.h
level_3/fss_extended_read/data/build/dependencies
level_3/fss_extended_read/data/build/settings
level_3/fss_identify/c/fss_identify.h
level_3/fss_identify/c/private-identify.c
level_3/fss_identify/c/private-identify.h
level_3/fss_identify/data/build/dependencies
level_3/fss_identify/data/build/settings
level_3/fss_payload_read/c/fss_payload_read.c
level_3/fss_payload_read/c/fss_payload_read.h
level_3/fss_payload_read/c/private-read.c
level_3/fss_payload_read/c/private-read.h
level_3/fss_payload_read/data/build/dependencies
level_3/fss_payload_read/data/build/settings
level_3/fss_write/c/basic/fss_write.h
level_3/fss_write/c/basic_list/fss_write.h
level_3/fss_write/c/embedded_list/fss_write.h
level_3/fss_write/c/extended/fss_write.h
level_3/fss_write/c/extended_list/fss_write.h
level_3/fss_write/c/main/fss_write.h
level_3/fss_write/c/main/main.c
level_3/fss_write/c/payload/fss_write.c
level_3/fss_write/c/payload/fss_write.h
level_3/fss_write/data/build/dependencies
level_3/fss_write/data/build/settings
level_3/fss_write/data/build/settings.basic
level_3/fss_write/data/build/settings.basic_list
level_3/fss_write/data/build/settings.embedded_list
level_3/fss_write/data/build/settings.extended
level_3/fss_write/data/build/settings.extended_list
level_3/fss_write/data/build/settings.main
level_3/fss_write/data/build/settings.payload
level_3/iki_read/c/main/common.c
level_3/iki_read/c/main/identify.c
level_3/iki_read/c/main/iki_read.h
level_3/iki_read/c/main/process.c
level_3/iki_read/data/build/dependencies
level_3/iki_read/data/build/settings
level_3/iki_write/c/main/iki_write.h
level_3/iki_write/data/build/dependencies
level_3/iki_write/data/build/settings
level_3/status_code/c/fss/status_code.h
level_3/status_code/c/main/status_code.h
level_3/status_code/data/build/dependencies
level_3/status_code/data/build/dependencies.fss
level_3/status_code/data/build/settings
level_3/status_code/data/build/settings.fss
level_3/status_code/data/build/settings.main
level_3/utf8/c/main/utf8.h
level_3/utf8/data/build/dependencies
level_3/utf8/data/build/settings

index e4a39e3ecd2c9aa8924017c8091f5c3491408712..efc707da99372206720331a5eaff68a779767459 100644 (file)
@@ -22,6 +22,7 @@ build_libraries -lc -lcap
 build_sources_library account.c private-account.c account/accounts.c account/private-accounts.c
 build_sources_library capability.c
 build_sources_library color.c private-color.c color/common.c
+build_sources_library compare.c compare/utf.c private-compare.c compare/private-utf.c
 build_sources_library console.c console/common.c private-console.c
 build_sources_library control_group.c control_group/common.c
 build_sources_library conversion.c private-conversion.c conversion/common.c
@@ -33,15 +34,30 @@ build_sources_library fss.c private-fss.c fss/common.c fss/named.c fss/nest.c fs
 build_sources_library iki.c iki/common.c iki/data.c private-iki.c iki/private-data.c
 build_sources_library limit.c limit/set.c limit/value.c limit/private-set.c limit/private-value.c
 build_sources_library memory.c private-memory.c memory/structure.c
+build_sources_library parse.c parse/utf.c
 build_sources_library path.c private-path.c path/common.c
 build_sources_library pipe.c
 build_sources_library print.c private-print.c print/common.c print/to.c print/private-to.c
+build_sources_library rip.c rip/utf.c private-rip.c rip/private-utf.c
 build_sources_library serialize.c private-serialize.c serialize/common.c
 build_sources_library signal.c
 build_sources_library socket.c
 build_sources_library status_string.c
-build_sources_library string.c private-string.c string/common.c string/private-dynamic.c string/private-dynamics.c string/private-dynamicss.c string/private-maps.c string/private-mapss.c string/private-map_multis.c string/private-map_multiss.c string/private-quantitys.c string/private-quantityss.c string/private-ranges.c string/private-rangess.c string/private-triples.c string/private-tripless.c
-build_sources_library string/dynamic.c string/dynamics.c string/dynamicss.c string/map.c string/maps.c string/mapss.c string/map_multi.c string/map_multis.c string/map_multiss.c string/quantity.c string/quantitys.c string/quantityss.c string/range.c string/ranges.c string/rangess.c string/static.c string/statics.c string/staticss.c string/triple.c string/triples.c string/tripless.c
+build_sources_library string.c
+build_sources_library private-string.c string/common.c
+build_sources_library string/private-dynamic.c string/private-dynamics.c string/private-dynamicss.c
+build_sources_library string/private-maps.c string/private-mapss.c
+build_sources_library string/private-map_multis.c string/private-map_multiss.c
+build_sources_library string/private-quantitys.c string/private-quantityss.c
+build_sources_library string/private-ranges.c string/private-rangess.c
+build_sources_library string/private-triples.c string/private-tripless.c
+build_sources_library string/dynamic.c string/dynamics.c string/dynamicss.c
+build_sources_library string/map.c string/maps.c string/mapss.c
+build_sources_library string/map_multi.c string/map_multis.c string/map_multiss.c
+build_sources_library string/quantity.c string/quantitys.c string/quantityss.c
+build_sources_library string/range.c string/ranges.c string/rangess.c
+build_sources_library string/static.c string/statics.c string/staticss.c
+build_sources_library string/triple.c string/triples.c string/tripless.c
 build_sources_library type_array/array_length.c type_array/cell.c type_array/fll_id.c type_array/int8.c type_array/int16.c type_array/int32.c type_array/int64.c type_array/int128.c type_array/state.c type_array/status.c type_array/uint8.c type_array/uint16.c type_array/uint32.c type_array/uint64.c type_array/uint128.c
 build_sources_library type_array/private-array_length.c type_array/private-cell.c type_array/private-fll_id.c type_array/private-int8.c type_array/private-int16.c type_array/private-int32.c type_array/private-int64.c type_array/private-int128.c type_array/private-state.c type_array/private-status.c type_array/private-uint8.c type_array/private-uint16.c type_array/private-uint32.c type_array/private-uint64.c type_array/private-uint128.c
 build_sources_library utf.c private-utf.c private-utf_alphabetic.c private-utf_combining.c private-utf_control.c private-utf_digit.c private-utf_emoji.c private-utf_numeric.c private-utf_phonetic.c private-utf_private.c private-utf_punctuation.c private-utf_subscript.c private-utf_superscript.c private-utf_symbol.c private-utf_unassigned.c private-utf_valid.c private-utf_whitespace.c private-utf_wide.c private-utf_word.c private-utf_zero_width.c
@@ -53,6 +69,7 @@ build_sources_library-level thread.c private-thread.c thread/attribute.c thread/
 build_sources_headers account.h account/accounts.h account/common.h
 build_sources_headers capability.h capability/common.h
 build_sources_headers color.h color/common.h
+build_sources_headers compare.h compare/utf.h
 build_sources_headers console.h console/common.h private-console.h
 build_sources_headers control_group.h control_group/common.h
 build_sources_headers conversion.h conversion/common.h
@@ -64,15 +81,24 @@ build_sources_headers fss.h fss/comment.h fss/common.h fss/delimit.h fss/named.h
 build_sources_headers iki.h iki/common.h iki/data.h
 build_sources_headers limit.h limit/set.h limit/value.h
 build_sources_headers memory.h memory/structure.h memory/common.h
+build_sources_headers parse.h parse/utf.h
 build_sources_headers path.h path/common.h
 build_sources_headers pipe.h
 build_sources_headers print.h print/to.h print/common.h
+build_sources_headers rip.h rip/utf.h
 build_sources_headers serialize.h serialize/common.h
 build_sources_headers signal.h signal/common.h
 build_sources_headers socket.h socket/common.h
 build_sources_headers status.h
 build_sources_headers status_string.h
-build_sources_headers string.h string/common.h string/dynamic.h string/dynamics.h string/dynamicss.h string/map.h string/maps.h string/mapss.h string/map_multi.h string/map_multis.h string/map_multiss.h string/quantity.h string/quantitys.h string/quantityss.h string/range.h string/ranges.h string/rangess.h string/static.h string/statics.h string/staticss.h string/triple.h string/triples.h string/tripless.h
+build_sources_headers string.h string/common.h
+build_sources_headers string/dynamic.h string/dynamics.h string/dynamicss.h
+build_sources_headers string/map.h string/maps.h string/mapss.h
+build_sources_headers string/map_multi.h string/map_multis.h string/map_multiss.h
+build_sources_headers string/quantity.h string/quantitys.h string/quantityss.h
+build_sources_headers string/range.h string/ranges.h string/rangess.h
+build_sources_headers string/static.h string/statics.h string/staticss.h
+build_sources_headers string/triple.h string/triples.h string/tripless.h
 build_sources_headers type.h type_file.h
 build_sources_headers type_array.h type_array/common.h
 build_sources_headers type_array/array_length.h type_array/cell.h type_array/fll_id.h type_array/int8.h type_array/int16.h type_array/int32.h type_array/int64.h type_array/int128.h type_array/state.h type_array/status.h type_array/uint8.h type_array/uint16.h type_array/uint32.h type_array/uint64.h type_array/uint128.h
index b0d9654bfe496a1363f14607e1a7ee11b327e4f1..12e61a378434fd1ab541f8703eb316489e6efb52 100644 (file)
@@ -30,8 +30,6 @@ build_sources_library iki.c
 build_sources_library path.c
 build_sources_library print.c private-print.c print/common.c
 build_sources_library signal.c
-build_sources_library string.c private-string.c
-build_sources_library utf.c private-utf.c
 build_sources_library utf_file.c private-utf_file.c
 
 build_sources_headers control_group.h
@@ -44,8 +42,6 @@ build_sources_headers iki.h
 build_sources_headers path.h
 build_sources_headers print.h print/common.h
 build_sources_headers signal.h signal/common.h
-build_sources_headers string.h
-build_sources_headers utf.h
 build_sources_headers utf_file.h
 
 build_script yes
index bf67e507f08bd8312216832362d3efbf06fd1a39..28c7663a4ede44fb65976ab88d7b63961b65c9de 100644 (file)
@@ -22,6 +22,7 @@ build_libraries -lc -lcap
 build_sources_library level_0/account.c level_0/private-account.c level_0/account/accounts.c level_0/account/private-accounts.c
 build_sources_library level_0/capability.c
 build_sources_library level_0/color.c level_0/private-color.c level_0/color/common.c
+build_sources_library level_0/compare.c level_0/compare/utf.c level_0/private-compare.c level_0/compare/private-utf.c
 build_sources_library level_0/console.c level_0/console/common.c level_0/private-console.c
 build_sources_library level_0/control_group.c level_0/control_group/common.c
 build_sources_library level_0/conversion.c level_0/private-conversion.c level_0/conversion/common.c
@@ -33,15 +34,30 @@ build_sources_library level_0/fss.c level_0/private-fss.c level_0/fss/common.c l
 build_sources_library level_0/iki.c level_0/iki/common.c level_0/iki/data.c level_0/private-iki.c level_0/iki/private-data.c
 build_sources_library level_0/limit.c level_0/limit/set.c level_0/limit/value.c level_0/limit/private-set.c level_0/limit/private-value.c
 build_sources_library level_0/memory.c level_0/private-memory.c level_0/memory/structure.c
+build_sources_library level_0/parse.c level_0/parse/utf.c
 build_sources_library level_0/path.c level_0/private-path.c level_0/path/common.c
 build_sources_library level_0/pipe.c
 build_sources_library level_0/print.c level_0/private-print.c level_0/print/common.c level_0/print/to.c level_0/print/private-to.c
+build_sources_library level_0/rip.c level_0/rip/utf.c level_0/private-rip.c level_0/rip/private-utf.c
 build_sources_library level_0/serialize.c level_0/private-serialize.c level_0/serialize/common.c
 build_sources_library level_0/signal.c
 build_sources_library level_0/socket.c
 build_sources_library level_0/status_string.c
-build_sources_library level_0/string.c level_0/private-string.c level_0/string/common.c level_0/string/private-dynamic.c level_0/string/private-dynamics.c level_0/string/private-dynamicss.c level_0/string/private-maps.c level_0/string/private-mapss.c level_0/string/private-map_multis.c level_0/string/private-map_multiss.c level_0/string/private-quantitys.c level_0/string/private-quantityss.c level_0/string/private-ranges.c level_0/string/private-rangess.c level_0/string/private-triples.c level_0/string/private-tripless.c
-build_sources_library level_0/string/dynamic.c level_0/string/dynamics.c level_0/string/dynamicss.c level_0/string/map.c level_0/string/maps.c level_0/string/mapss.c level_0/string/map_multi.c level_0/string/map_multis.c level_0/string/map_multiss.c level_0/string/quantity.c level_0/string/quantitys.c level_0/string/quantityss.c level_0/string/range.c level_0/string/ranges.c level_0/string/rangess.c level_0/string/static.c level_0/string/statics.c level_0/string/staticss.c level_0/string/triple.c level_0/string/triples.c level_0/string/tripless.c
+build_sources_library level_0/string.c
+build_sources_library level_0/private-string.c level_0/string/common.c
+build_sources_library level_0/string/private-dynamic.c level_0/string/private-dynamics.c level_0/string/private-dynamicss.c
+build_sources_library level_0/string/private-maps.c level_0/string/private-mapss.c
+build_sources_library level_0/string/private-map_multis.c level_0/string/private-map_multiss.c
+build_sources_library level_0/string/private-quantitys.c level_0/string/private-quantityss.c
+build_sources_library level_0/string/private-ranges.c level_0/string/private-rangess.c
+build_sources_library level_0/string/private-triples.c level_0/string/private-tripless.c
+build_sources_library level_0/string/dynamic.c level_0/string/dynamics.c level_0/string/dynamicss.c
+build_sources_library level_0/string/map.c level_0/string/maps.c level_0/string/mapss.c
+build_sources_library level_0/string/map_multi.c level_0/string/map_multis.c level_0/string/map_multiss.c
+build_sources_library level_0/string/quantity.c level_0/string/quantitys.c level_0/string/quantityss.c
+build_sources_library level_0/string/range.c level_0/string/ranges.c level_0/string/rangess.c
+build_sources_library level_0/string/static.c level_0/string/statics.c level_0/string/staticss.c
+build_sources_library level_0/string/triple.c level_0/string/triples.c level_0/string/tripless.c
 build_sources_library level_0/type_array/array_length.c level_0/type_array/cell.c level_0/type_array/fll_id.c level_0/type_array/int8.c level_0/type_array/int16.c level_0/type_array/int32.c level_0/type_array/int64.c level_0/type_array/int128.c level_0/type_array/state.c level_0/type_array/status.c level_0/type_array/uint8.c level_0/type_array/uint16.c level_0/type_array/uint32.c level_0/type_array/uint64.c level_0/type_array/uint128.c
 build_sources_library level_0/type_array/private-array_length.c level_0/type_array/private-cell.c level_0/type_array/private-fll_id.c level_0/type_array/private-int8.c level_0/type_array/private-int16.c level_0/type_array/private-int32.c level_0/type_array/private-int64.c level_0/type_array/private-int128.c level_0/type_array/private-state.c level_0/type_array/private-status.c level_0/type_array/private-uint8.c level_0/type_array/private-uint16.c level_0/type_array/private-uint32.c level_0/type_array/private-uint64.c level_0/type_array/private-uint128.c
 build_sources_library level_0/utf.c level_0/private-utf.c level_0/private-utf_alphabetic.c level_0/private-utf_combining.c level_0/private-utf_control.c level_0/private-utf_digit.c level_0/private-utf_emoji.c level_0/private-utf_numeric.c level_0/private-utf_phonetic.c level_0/private-utf_private.c level_0/private-utf_punctuation.c level_0/private-utf_subscript.c level_0/private-utf_superscript.c level_0/private-utf_symbol.c level_0/private-utf_unassigned.c level_0/private-utf_valid.c level_0/private-utf_whitespace.c level_0/private-utf_wide.c level_0/private-utf_word.c level_0/private-utf_zero_width.c
@@ -57,8 +73,6 @@ build_sources_library level_1/iki.c
 build_sources_library level_1/path.c
 build_sources_library level_1/print.c level_1/private-print.c level_1/print/common.c
 build_sources_library level_1/signal.c
-build_sources_library level_1/string.c level_1/private-string.c
-build_sources_library level_1/utf.c level_1/private-utf.c
 build_sources_library level_1/utf_file.c level_1/private-utf_file.c
 
 build_sources_library level_2/control_group.c
@@ -77,6 +91,7 @@ build_sources_library-monolithic level_0/thread.c level_0/private-thread.c level
 build_sources_headers level_0/account.h level_0/account/accounts.h level_0/account/common.h
 build_sources_headers level_0/capability.h level_0/capability/common.h
 build_sources_headers level_0/color.h level_0/color/common.h
+build_sources_headers level_0/compare.h level_0/compare/utf.h
 build_sources_headers level_0/console.h level_0/console/common.h level_0/private-console.h
 build_sources_headers level_0/control_group.h level_0/control_group/common.h
 build_sources_headers level_0/conversion.h level_0/conversion/common.h
@@ -88,15 +103,24 @@ build_sources_headers level_0/fss.h level_0/fss/comment.h level_0/fss/common.h l
 build_sources_headers level_0/iki.h level_0/iki/common.h level_0/iki/data.h
 build_sources_headers level_0/limit.h level_0/limit/set.h level_0/limit/value.h
 build_sources_headers level_0/memory.h level_0/memory/structure.h level_0/memory/common.h
+build_sources_headers level_0/parse.h level_0/parse/utf.h
 build_sources_headers level_0/path.h level_0/path/common.h
 build_sources_headers level_0/pipe.h
 build_sources_headers level_0/print.h level_0/print/to.h level_0/print/common.h
+build_sources_headers level_0/rip.h level_0/rip/utf.h
 build_sources_headers level_0/serialize.h level_0/serialize/common.h
 build_sources_headers level_0/signal.h level_0/signal/common.h
 build_sources_headers level_0/socket.h level_0/socket/common.h
 build_sources_headers level_0/status.h
 build_sources_headers level_0/status_string.h
-build_sources_headers level_0/string.h level_0/string/common.h level_0/string/dynamic.h level_0/string/dynamics.h level_0/string/dynamicss.h level_0/string/map.h level_0/string/maps.h level_0/string/mapss.h level_0/string/map_multi.h level_0/string/map_multis.h level_0/string/map_multiss.h level_0/string/quantity.h level_0/string/quantitys.h level_0/string/quantityss.h level_0/string/range.h level_0/string/ranges.h level_0/string/rangess.h level_0/string/static.h level_0/string/statics.h level_0/string/staticss.h level_0/string/triple.h level_0/string/triples.h level_0/string/tripless.h
+build_sources_headers level_0/string.h level_0/string/common.h
+build_sources_headers level_0/string/dynamic.h level_0/string/dynamics.h level_0/string/dynamicss.h
+build_sources_headers level_0/string/map.h level_0/string/maps.h level_0/string/mapss.h
+build_sources_headers level_0/string/map_multi.h level_0/string/map_multis.h level_0/string/map_multiss.h
+build_sources_headers level_0/string/quantity.h level_0/string/quantitys.h level_0/string/quantityss.h
+build_sources_headers level_0/string/range.h level_0/string/ranges.h level_0/string/rangess.h
+build_sources_headers level_0/string/static.h level_0/string/statics.h level_0/string/staticss.h
+build_sources_headers level_0/string/triple.h level_0/string/triples.h level_0/string/tripless.h
 build_sources_headers level_0/type.h level_0/type_file.h
 build_sources_headers level_0/type_array.h level_0/type_array/common.h
 build_sources_headers level_0/type_array/array_length.h level_0/type_array/cell.h level_0/type_array/fll_id.h level_0/type_array/int8.h level_0/type_array/int16.h level_0/type_array/int32.h level_0/type_array/int64.h level_0/type_array/int128.h level_0/type_array/state.h level_0/type_array/status.h level_0/type_array/uint8.h level_0/type_array/uint16.h level_0/type_array/uint32.h level_0/type_array/uint64.h level_0/type_array/uint128.h
@@ -112,8 +136,6 @@ build_sources_headers level_1/iki.h
 build_sources_headers level_1/path.h
 build_sources_headers level_1/print.h level_1/print/common.h
 build_sources_headers level_1/signal.h level_1/signal/common.h
-build_sources_headers level_1/string.h
-build_sources_headers level_1/utf.h
 build_sources_headers level_1/utf_file.h
 
 build_sources_headers level_2/control_group.h
index 1de3fe123c23b34439222a09d0aa452e77ebd2dc..65c85186a6433f95d6f57488ae6cdf318adbca8b 100644 (file)
@@ -125,7 +125,7 @@ if [[ $1 == "individual" ]] ; then
   $shell_command build/scripts/package.sh $verbose $color rebuild -i
 
   if [[ $? -eq 0 ]] ; then
-    for i in f_type f_status f_memory f_type_array f_string f_utf f_account f_capability f_color f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_path f_pipe f_print f_status_string f_serialize f_signal f_socket f_thread fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print fl_signal fl_string fl_utf fl_utf_file fll_control_group fll_error fll_execute fll_file fll_fss fll_fss_status_string fll_iki fll_print fll_program fll_status_string ; do
+    for i in f_type f_status f_memory f_type_array f_string f_utf f_account f_capability f_color f_compare f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_parse f_path f_pipe f_print f_rip f_status_string f_serialize f_signal f_socket f_thread fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print fl_signal fl_utf_file fll_control_group fll_error fll_execute fll_file fll_fss fll_fss_status_string fll_iki fll_print fll_program fll_status_string ; do
       echo && echo "Processing $i." &&
 
       cd package/individual/$i-$version/ &&
index ae27b0b6268cc5308b9d3fdb2a127218d072169a..b8ead6f75795bec5fad36a04217b2bd4152dad66 100644 (file)
@@ -67,7 +67,7 @@ test_main() {
   local verbose=
   local verbose_common=
 
-  local projects="f_type f_status f_memory f_type_array f_string f_utf f_account f_capability f_color f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_path f_pipe f_print f_serialize f_signal f_socket f_status_string f_thread fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print fl_signal fl_string fl_utf fl_utf_file fll_control_group fll_error fll_execute fll_file fll_fss fll_fss_status_string fll_iki fll_print fll_program fll_status_string"
+  local projects="f_type f_status f_memory f_type_array f_string f_utf f_account f_capability f_color f_compare f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_parse f_path f_pipe f_print f_rip f_serialize f_signal f_socket f_status_string f_thread fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print fl_signal fl_utf_file fll_control_group fll_error fll_execute fll_file fll_fss fll_fss_status_string fll_iki fll_print fll_program fll_status_string"
   local projects_no_tests="f_type"
 
   let failure=0
index 48e2c1bc300752d7f8256b7babf847253c1a3a99..cd1730a7ffa8179160c73f8620b9280c3b3a62a9 100644 (file)
@@ -3,8 +3,8 @@
 // To get the list of all possible functions, use something like: "grep -horP '\b_di_f_\w*\b' level_0/f_color/".
 //
 // Example: echo > /tmp/all.txt
-//          for i in f_type f_status f_memory f_type_array f_string f_utf f_account f_capability f_color f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_path f_pipe f_print f_signal f_thread ; do grep -horP '\b_di_f_\w*\b' level_0/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_0/$i/c >> /tmp/all.txt ; done
-//          for i in fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print fl_string ; do grep -horP '\b_di_fl_\w*\b' level_1/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_1/$i/c >> /tmp/all.txt ; done
+//          for i in f_type f_status f_memory f_type_array f_string f_utf f_account f_capability f_color f_compare f_console f_control_group f_conversion f_directory f_environment f_execute f_file f_fss f_iki f_limit f_parse f_path f_pipe f_print f_rip f_signal f_thread ; do grep -horP '\b_di_f_\w*\b' level_0/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_0/$i/c >> /tmp/all.txt ; done
+//          for i in fl_control_group fl_conversion fl_directory fl_environment fl_execute fl_fss fl_iki fl_path fl_print ; do grep -horP '\b_di_fl_\w*\b' level_1/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_1/$i/c >> /tmp/all.txt ; done
 //          for i in fll_error fll_execute fll_file fll_fss fll_print fll_program ; do grep -horP '\b_di_fll_\w*\b' level_2/$i/c >> /tmp/all.txt ; grep -horP '\b_di_macro_\w*\b' level_2/$i/c >> /tmp/all.txt ; done
 //          sort /tmp/all.txt | uniq | sed -e 's|^_|#define &|g' > /tmp/sorted.txt
 
 //#define _di_f_color_terminal_s_
 //#define _di_f_color_terminal_value_linux_s_
 
+#define _di_f_compare_
+//#define _di_f_compare_dynamic_
+#define _di_f_compare_dynamic_except_
+#define _di_f_compare_dynamic_except_string_
+#define _di_f_compare_dynamic_except_trim_
+#define _di_f_compare_dynamic_except_trim_string_
+//#define _di_f_compare_dynamic_partial_
+//#define _di_f_compare_dynamic_partial_dynamic_
+#define _di_f_compare_dynamic_partial_except_
+#define _di_f_compare_dynamic_partial_except_dynamic_
+#define _di_f_compare_dynamic_partial_except_string_
+#define _di_f_compare_dynamic_partial_except_trim_
+#define _di_f_compare_dynamic_partial_except_trim_dynamic_
+#define _di_f_compare_dynamic_partial_except_trim_string_
+//#define _di_f_compare_dynamic_partial_string_
+#define _di_f_compare_dynamic_partial_trim_
+#define _di_f_compare_dynamic_partial_trim_dynamic_
+//#define _di_f_compare_dynamic_partial_trim_string_
+#define _di_f_compare_dynamic_string_
+//#define _di_f_compare_dynamic_trim_
+#define _di_f_compare_dynamic_trim_string_
+#define _di_f_compare_except_
+#define _di_f_compare_except_trim_
+#define _di_f_compare_trim_
+#define _di_f_compare_utf_
+#define _di_f_compare_utf_dynamic_
+#define _di_f_compare_utf_dynamic_partial_
+#define _di_f_compare_utf_dynamic_partial_trim_
+#define _di_f_compare_utf_dynamic_trim_
+#define _di_f_compare_utf_trim_
+
 //#define _di_f_console_arguments_t_
 #define _di_f_console_environment_process_
 //#define _di_f_console_flag_e_
 //#define _di_f_conversion_character_to_hexidecimal_
 //#define _di_f_conversion_character_to_octal_
 //#define _di_f_conversion_d_
-#define _di_f_conversion_data_base_2_c_
-#define _di_f_conversion_data_base_8_c_
 //#define _di_f_conversion_data_base_10_c_
 #define _di_f_conversion_data_base_12_c_
 #define _di_f_conversion_data_base_16_c_
+#define _di_f_conversion_data_base_2_c_
+#define _di_f_conversion_data_base_8_c_
 //#define _di_f_conversion_data_c_
 //#define _di_f_conversion_data_flag_d_
 //#define _di_f_conversion_data_t_
 #define _di_f_environment_secure_is_
 //#define _di_f_environment_set_
 #define _di_f_environment_unset_
+
 //#define _di_f_execute_e_
 #define _di_f_execute_result_t_
 //#define _di_f_execute_scheduler_t_
 #define _di_f_int8_t_
 
 //#define _di_fl_control_group_apply_
+
 //#define _di_fl_conversion_data_base_10_c_
 #define _di_fl_conversion_data_base_12_c_
 #define _di_fl_conversion_data_base_16_c_
 #define _di_fl_fss_basic_list_object_write_
 #define _di_fl_fss_basic_object_read_
 #define _di_fl_fss_basic_object_write_
-
 #define _di_fl_fss_embedded_list_content_read_
 #define _di_fl_fss_embedded_list_content_write_
 #define _di_fl_fss_embedded_list_object_read_
 #define _di_fl_fss_embedded_list_object_write_
-
 //#define _di_fl_fss_extended_content_read_
 #define _di_fl_fss_extended_content_write_
 #define _di_fl_fss_extended_list_content_read_
 #define _di_fl_print_trim_safely_
 //#define _di_fl_print_warning_s_
 
-#define _di_fl_string_compare_
-#define _di_fl_string_compare_except_
-#define _di_fl_string_compare_except_trim_
-#define _di_fl_string_compare_trim_
-//#define _di_fl_string_dynamic_compare_
-#define _di_fl_string_dynamic_compare_except_
-#define _di_fl_string_dynamic_compare_except_string_
-#define _di_fl_string_dynamic_compare_except_trim_
-#define _di_fl_string_dynamic_compare_except_trim_string_
-#define _di_fl_string_dynamic_compare_string_
-//#define _di_fl_string_dynamic_compare_trim_
-#define _di_fl_string_dynamic_compare_trim_string_
-//#define _di_fl_string_dynamic_partial_compare_
-//#define _di_fl_string_dynamic_partial_compare_dynamic_
-#define _di_fl_string_dynamic_partial_compare_except_
-#define _di_fl_string_dynamic_partial_compare_except_dynamic_
-#define _di_fl_string_dynamic_partial_compare_except_string_
-#define _di_fl_string_dynamic_partial_compare_except_trim_
-#define _di_fl_string_dynamic_partial_compare_except_trim_dynamic_
-#define _di_fl_string_dynamic_partial_compare_except_trim_string_
-//#define _di_fl_string_dynamic_partial_compare_string_
-#define _di_fl_string_dynamic_partial_compare_trim_
-#define _di_fl_string_dynamic_partial_compare_trim_dynamic_
-//#define _di_fl_string_dynamic_partial_compare_trim_string_
-#define _di_fl_string_dynamic_partial_fll_identify_
-#define _di_fl_string_dynamic_partial_rip_
-#define _di_fl_string_dynamic_partial_rip_nulless_
-//#define _di_fl_string_dynamic_rip_
-#define _di_fl_string_dynamic_rip_nulless_
-#define _di_fl_string_dynamic_seek_line_to_utf_character_
-#define _di_fl_string_dynamic_seek_line_until_graph_
-#define _di_fl_string_dynamic_seek_line_until_graph_non_
-#define _di_fl_string_dynamic_seek_to_utf_character_
-#define _di_fl_string_rip_
-#define _di_fl_string_rip_nulless_
-#define _di_fl_string_seek_line_to_utf_character_
-#define _di_fl_string_seek_line_until_graph_
-#define _di_fl_string_seek_line_until_graph_non_
-#define _di_fl_string_seek_to_utf_character_
-
 #define _di_f_memory_adjust_
 //#define _di_f_memory_default_d_
 //#define _di_f_memory_delete_
 
 //#define _di_f_mode_t_
 
+#define _di_f_parse_dynamic_partial_fll_identify_
+#define _di_f_parse_dynamic_seek_line_to_utf_character_
+#define _di_f_parse_dynamic_seek_line_until_graph_
+#define _di_f_parse_dynamic_seek_line_until_graph_non_
+#define _di_f_parse_dynamic_seek_to_utf_character_
+#define _di_f_parse_seek_line_to_utf_character_
+#define _di_f_parse_seek_line_until_graph_
+#define _di_f_parse_seek_line_until_graph_non_
+#define _di_f_parse_seek_to_utf_character_
+#define _di_f_parse_utf_dynamic_seek_line_to_char_
+#define _di_f_parse_utf_dynamic_seek_line_until_graph_
+#define _di_f_parse_utf_dynamic_seek_line_until_graph_non_
+#define _di_f_parse_utf_dynamic_seek_to_char_
+#define _di_f_parse_utf_seek_line_to_char_
+#define _di_f_parse_utf_seek_line_until_graph_
+#define _di_f_parse_utf_seek_line_until_graph_non_
+#define _di_f_parse_utf_seek_to_char_
+#define _di_f_parse_utf_seek_to_character_
+
 //#define _di_f_path_change_
 //#define _di_f_path_change_at_
 //#define _di_f_path_current_
+//#define _di_f_path_d_
 //#define _di_f_path_environment_s_
 //#define _di_f_path_extension_separator_s_
 #define _di_f_path_home_s_
 #define _di_f_path_user_settings_s_
 #define _di_f_path_user_shared_s_
 #define _di_f_path_user_temporary_s_
+
 #define _di_f_pipe_error_exists_
 //#define _di_f_pipe_input_exists_
 #define _di_f_pipe_output_exists_
 #define _di_f_print_to_terminated_
 //#define _di_f_print_write_max_d_
 
+#define _di_f_rip_
+//#define _di_f_rip_dynamic_
+#define _di_f_rip_dynamic_nulless_
+#define _di_f_rip_dynamic_partial_
+#define _di_f_rip_dynamic_partial_nulless_
+#define _di_f_rip_nulless_
+#define _di_f_rip_utf_
+#define _di_f_rip_utf_dynamic_
+#define _di_f_rip_utf_dynamic_nulless_
+#define _di_f_rip_utf_nulless_
+
 #define _di_f_signal_action_
 //#define _di_f_signal_close_
 //#define _di_f_signal_how_t_
 #define _di_f_utf_space_separator_line_s_
 #define _di_f_utf_space_separator_paragraph_s_
 #define _di_f_utf_space_thin_s_
+
 #define _di_f_utf_string_append_
 #define _di_f_utf_string_append_assure_
 #define _di_f_utf_string_append_assure_nulless_
index f2c975a41726663c6ea077d2f726a561c093b2c0..8c000aa968f50034aaf6fed34869a07da8348682 100644 (file)
@@ -26,6 +26,7 @@ build_libraries -lc -lcap
 build_sources_program fll/level_0/account.c fll/level_0/private-account.c fll/level_0/account/accounts.c fll/level_0/account/private-accounts.c
 build_sources_program fll/level_0/capability.c
 build_sources_program fll/level_0/color.c fll/level_0/private-color.c fll/level_0/color/common.c
+build_sources_program fll/level_0/compare.c fll/level_0/compare/utf.c fll/level_0/private-compare.c fll/level_0/compare/private-utf.c
 build_sources_program fll/level_0/console.c fll/level_0/console/common.c fll/level_0/private-console.c
 build_sources_program fll/level_0/control_group.c fll/level_0/control_group/common.c
 build_sources_program fll/level_0/conversion.c fll/level_0/private-conversion.c fll/level_0/conversion/common.c
@@ -37,9 +38,11 @@ build_sources_program fll/level_0/fss.c fll/level_0/private-fss.c fll/level_0/fs
 build_sources_program fll/level_0/iki.c fll/level_0/private-iki.c fll/level_0/iki/common.c fll/level_0/iki/private-data.c fll/level_0/iki/data.c
 build_sources_program fll/level_0/limit.c fll/level_0/limit/set.c fll/level_0/limit/value.c fll/level_0/limit/private-set.c fll/level_0/limit/private-value.c
 build_sources_program fll/level_0/memory.c fll/level_0/private-memory.c fll/level_0/memory/structure.c
+build_sources_program fll/level_0/parse.c fll/level_0/parse/utf.c
 build_sources_program fll/level_0/path.c fll/level_0/private-path.c fll/level_0/path/common.c
 build_sources_program fll/level_0/pipe.c
 build_sources_program fll/level_0/print.c fll/level_0/private-print.c fll/level_0/print/common.c fll/level_0/print/to.c fll/level_0/print/private-to.c
+build_sources_program fll/level_0/rip.c fll/level_0/rip/utf.c fll/level_0/private-rip.c fll/level_0/rip/private-utf.c
 build_sources_program fll/level_0/signal.c
 build_sources_program fll/level_0/string.c fll/level_0/private-string.c fll/level_0/string/common.c fll/level_0/string/private-dynamic.c fll/level_0/string/private-dynamics.c fll/level_0/string/private-dynamicss.c fll/level_0/string/private-maps.c fll/level_0/string/private-mapss.c fll/level_0/string/private-map_multis.c fll/level_0/string/private-map_multiss.c fll/level_0/string/private-quantitys.c fll/level_0/string/private-quantityss.c fll/level_0/string/private-ranges.c fll/level_0/string/private-rangess.c fll/level_0/string/private-triples.c fll/level_0/string/private-tripless.c
 build_sources_program fll/level_0/string/dynamic.c fll/level_0/string/dynamics.c fll/level_0/string/dynamicss.c fll/level_0/string/map.c fll/level_0/string/maps.c fll/level_0/string/mapss.c fll/level_0/string/map_multi.c fll/level_0/string/map_multis.c fll/level_0/string/map_multiss.c fll/level_0/string/quantity.c fll/level_0/string/quantitys.c fll/level_0/string/quantityss.c fll/level_0/string/range.c fll/level_0/string/ranges.c fll/level_0/string/rangess.c fll/level_0/string/static.c fll/level_0/string/statics.c fll/level_0/string/staticss.c fll/level_0/string/triple.c fll/level_0/string/triples.c fll/level_0/string/tripless.c
@@ -58,7 +61,6 @@ build_sources_program fll/level_1/private-fss.c fll/level_1/fss/basic.c fll/leve
 build_sources_program fll/level_1/iki.c
 build_sources_program fll/level_1/path.c
 build_sources_program fll/level_1/print.c fll/level_1/private-print.c fll/level_1/print/common.c
-build_sources_program fll/level_1/string.c fll/level_1/private-string.c
 
 build_sources_program fll/level_2/error.c fll/level_2/private-error.c fll/level_2/error/common.c
 build_sources_program fll/level_2/execute.c fll/level_2/private-execute.c
diff --git a/level_0/f_compare/c/compare.c b/level_0/f_compare/c/compare.c
new file mode 100644 (file)
index 0000000..5791605
--- /dev/null
@@ -0,0 +1,178 @@
+#include "compare.h"
+#include "private-compare.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_compare_
+  f_status_t f_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
+
+    return private_f_compare(string1, string2, 0, 0, length1, length2);
+  }
+#endif // _di_f_compare_
+
+#ifndef _di_f_compare_except_
+  f_status_t f_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except(string1, string2, 0, 0, length1, length2, except1, except2);
+  }
+#endif // _di_f_compare_except_
+
+#ifndef _di_f_compare_except_trim_
+  f_status_t f_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except_trim(string1, string2, 0, 0, length1, length2, except1, except2);
+  }
+#endif // _di_f_compare_except_trim_
+
+#ifndef _di_f_compare_trim_
+  f_status_t f_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
+
+    return private_f_compare_trim(string1, string2, 0, 0, length1, length2);
+  }
+#endif // _di_f_compare_trim_
+
+#ifndef _di_f_compare_dynamic_
+  f_status_t f_compare_dynamic(const f_string_static_t string1, const f_string_static_t string2) {
+
+    return private_f_compare(string1.string, string2.string, 0, 0, string1.used, string2.used);
+  }
+#endif // _di_f_compare_dynamic_
+
+#ifndef _di_f_compare_dynamic_except_
+  f_status_t f_compare_dynamic_except(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except(string1.string, string2.string, 0, 0, string1.used, string2.used, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_except_
+
+#ifndef _di_f_compare_dynamic_except_string_
+  f_status_t f_compare_dynamic_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except(string1, string2.string, 0, 0, length1, string2.used, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_except_string_
+
+#ifndef _di_f_compare_dynamic_except_trim_
+  f_status_t f_compare_dynamic_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except_trim(string1.string, string2.string, 0, 0, string1.used, string2.used, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_except_trim_
+
+#ifndef _di_f_compare_dynamic_except_trim_string_
+  f_status_t f_compare_dynamic_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except_trim(string1, string2.string, 0, 0, length1, string2.used, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_except_trim_string_
+
+#ifndef _di_f_compare_dynamic_string_
+  f_status_t f_compare_dynamic_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1) {
+
+    return private_f_compare(string1, string2.string, 0, 0, length1, string2.used);
+  }
+#endif // _di_f_compare_dynamic_string_
+
+#ifndef _di_f_compare_dynamic_trim_
+  f_status_t f_compare_dynamic_trim(const f_string_static_t string1, const f_string_static_t string2) {
+
+    return private_f_compare_trim(string1.string, string2.string, 0, 0, string1.used, string2.used);
+  }
+#endif // _di_f_compare_dynamic_trim_
+
+#ifndef _di_f_compare_dynamic_trim_string_
+  f_status_t f_compare_dynamic_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1) {
+
+    return private_f_compare_trim(string1, string2.string, 0, 0, length1, string2.used);
+  }
+#endif // _di_f_compare_dynamic_trim_string_
+
+#ifndef _di_f_compare_dynamic_partial_
+  f_status_t f_compare_dynamic_partial(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
+
+    return private_f_compare(string1.string, string2.string, range1.start, range2.start, string1.used <= range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1);
+  }
+#endif // _di_f_compare_dynamic_partial_
+
+#ifndef _di_f_compare_dynamic_partial_dynamic_
+  f_status_t f_compare_dynamic_partial_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2) {
+
+    return private_f_compare(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1);
+  }
+#endif // _di_f_compare_dynamic_partial_dynamic_
+
+#ifndef _di_f_compare_dynamic_partial_string_
+  f_status_t f_compare_dynamic_partial_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2) {
+
+    return private_f_compare(string1, string2.string, 0, range2.start, length1, string2.used < range2.stop ? string2.used : range2.stop + 1);
+  }
+#endif // _di_f_compare_dynamic_partial_string_
+
+#ifndef _di_f_compare_dynamic_partial_except_
+  f_status_t f_compare_dynamic_partial_except(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except(string1.string, string2.string, range1.start, range2.start, string1.used < range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_partial_except_
+
+#ifndef _di_f_compare_dynamic_partial_except_dynamic_
+  f_status_t f_compare_dynamic_partial_except_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_partial_except_dynamic_
+
+#ifndef _di_f_compare_dynamic_partial_except_string_
+  f_status_t f_compare_dynamic_partial_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except(string1, string2.string, 0, range2.start, length1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_partial_except_string_
+
+#ifndef _di_f_compare_dynamic_partial_except_trim_
+  f_status_t f_compare_dynamic_partial_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except_trim(string1.string, string2.string, range1.start, range2.start, string1.used <= range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_partial_except_trim_
+
+#ifndef _di_f_compare_dynamic_partial_except_trim_dynamic_
+  f_status_t f_compare_dynamic_partial_except_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except_trim(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_partial_except_trim_dynamic_
+
+#ifndef _di_f_compare_dynamic_partial_except_trim_string_
+  f_status_t f_compare_dynamic_partial_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+
+    return private_f_compare_except_trim(string1, string2.string, 0, range2.start, length1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
+  }
+#endif // _di_f_compare_dynamic_partial_except_trim_string_
+
+#ifndef _di_f_compare_dynamic_partial_trim_
+  f_status_t f_compare_dynamic_partial_trim(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
+
+    return private_f_compare_trim(string1.string, string2.string, range1.start, range2.start, string1.used <= range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1);
+  }
+#endif // _di_f_compare_dynamic_partial_trim_
+
+#ifndef _di_f_compare_dynamic_partial_trim_dynamic_
+  f_status_t f_compare_dynamic_partial_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2) {
+
+    return private_f_compare_trim(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1);
+  }
+#endif // _di_f_compare_dynamic_partial_trim_dynamic_
+
+#ifndef _di_f_compare_dynamic_partial_trim_string_
+  f_status_t f_compare_dynamic_partial_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2) {
+
+    return private_f_compare_trim(string1, string2.string, 0, range2.start, length1, string2.used <= range2.stop ? string2.used : range2.stop + 1);
+  }
+#endif // _di_f_compare_dynamic_partial_trim_string_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/c/compare.h b/level_0/f_compare/c/compare.h
new file mode 100644 (file)
index 0000000..fc1ed83
--- /dev/null
@@ -0,0 +1,767 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Compare
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides basic string comparison capabilities.
+ */
+#ifndef _F_compare_h
+#define _F_compare_h
+
+// Libc includes.
+#include <string.h>
+
+// FLL-0 includes.
+#include <fll/level_0/status.h>
+#include <fll/level_0/memory.h>
+#include <fll/level_0/type.h>
+#include <fll/level_0/utf.h>
+
+// FLL-0 compare includes.
+#include <fll/level_0/compare/utf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   Length of string1.
+ * @param length2
+ *   Length of string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_
+  extern f_status_t f_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
+#endif // _di_f_compare_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   Length of string1.
+ * @param length2
+ *   Length of string2.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_except_
+  extern f_status_t f_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_except_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   Length of string1.
+ * @param length2
+ *   Length of string2.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_except_trim_
+  extern f_status_t f_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_except_trim_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   Length of string1.
+ * @param length2
+ *   Length of string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_trim_
+  extern f_status_t f_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
+#endif // _di_f_compare_trim_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_
+  extern f_status_t f_compare_dynamic(const f_string_static_t string1, const f_string_static_t string2);
+#endif // _di_f_compare_dynamic_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_except_
+  extern f_status_t f_compare_dynamic_except(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_except_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_except_string_
+  extern f_status_t f_compare_dynamic_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_except_string_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_except_trim_
+  extern f_status_t f_compare_dynamic_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_except_trim_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_except_trim_string_
+  extern f_status_t f_compare_dynamic_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_except_trim_string_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_string_
+  extern f_status_t f_compare_dynamic_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1);
+#endif // _di_f_compare_dynamic_string_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_trim_
+  extern f_status_t f_compare_dynamic_trim(const f_string_static_t string1, const f_string_static_t string2);
+#endif // _di_f_compare_dynamic_trim_
+
+/**
+ * Compare two strings, similar to strncmp().
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_trim_string_
+  extern f_status_t f_compare_dynamic_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1);
+#endif // _di_f_compare_dynamic_trim_string_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given ranges.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range1
+ *   A range within the string1 to restrict the comparison to.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_partial_
+  extern f_status_t f_compare_dynamic_partial(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2);
+#endif // _di_f_compare_dynamic_partial_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_partial_dynamic_
+  extern f_status_t f_compare_dynamic_partial_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2);
+#endif // _di_f_compare_dynamic_partial_dynamic_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given ranges.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range1
+ *   A range within the string1 to restrict the comparison to.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_partial_except_
+  extern f_status_t f_compare_dynamic_partial_except(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_partial_except_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_partial_except_dynamic_
+  extern f_status_t f_compare_dynamic_partial_except_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_partial_except_dynamic_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_partial_except_string_
+  extern f_status_t f_compare_dynamic_partial_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_partial_except_string_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given ranges.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range1
+ *   A range within the string1 to restrict the comparison to.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_partial_except_trim_
+  extern f_status_t f_compare_dynamic_partial_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_partial_except_trim_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_partial_except_trim_dynamic_
+  extern f_status_t f_compare_dynamic_partial_except_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_partial_except_trim_dynamic_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ * All 1-byte characters in except1 and except2 are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_partial_except_trim_string_
+  extern f_status_t f_compare_dynamic_partial_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
+#endif // _di_f_compare_dynamic_partial_except_trim_string_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_dynamic_partial_string_
+  extern f_status_t f_compare_dynamic_partial_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2);
+#endif // _di_f_compare_dynamic_partial_string_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_partial_trim_dynamic_
+  extern f_status_t f_compare_dynamic_partial_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2);
+#endif // _di_f_compare_dynamic_partial_trim_dynamic_
+
+/**
+ * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+ *
+ * This operates with the first string being a traditional string.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   The length of string1.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_compare_dynamic_partial_trim_string_
+  extern f_status_t f_compare_dynamic_partial_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2);
+#endif // _di_f_compare_dynamic_partial_trim_string_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_compare_h
diff --git a/level_0/f_compare/c/compare/private-utf.c b/level_0/f_compare/c/compare/private-utf.c
new file mode 100644 (file)
index 0000000..3cd67b0
--- /dev/null
@@ -0,0 +1,175 @@
+#include "../compare.h"
+#include "private-utf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(_di_f_compare_utf_) || !defined(_di_f_compare_utf_dynamic_) || !defined(_di_f_compare_utf_dynamic_partial_)
+  f_status_t private_f_compare_utf(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
+
+    f_array_length_t i1 = offset1;
+    f_array_length_t i2 = offset2;
+
+    for (; i1 < stop1 && i2 < stop2; ++i1, ++i2) {
+
+      // Skip past NULL in string1.
+      while (i1 < stop1 && !string1[i1]) ++i1;
+      if (i1 == stop1) break;
+
+      // Skip past NULL in string2.
+      while (i2 < stop2 && !string2[i2]) ++i2;
+      if (i2 == stop2) break;
+
+      if (string1[i1] != string2[i2]) return F_equal_to_not;
+    } // for
+
+    // Only return F_equal_to if all remaining characters are NULL.
+    for (; i1 < stop1; ++i1) {
+      if (string1[i1] != 0) return F_equal_to_not;
+    } // for
+
+    for (; i2 < stop2; ++i2) {
+      if (string2[i2] != 0) return F_equal_to_not;
+    } // for
+
+    return F_equal_to;
+  }
+#endif // !defined(_di_f_compare_utf_) || !defined(_di_f_compare_utf_dynamic_) || !defined(_di_f_compare_utf_dynamic_partial_)
+
+#if !defined(_di_f_compare_utf_trim_) || !defined(_di_f_compare_utf_dynamic_trim_) || !defined(_di_f_compare_utf_dynamic_partial_trim_)
+  f_status_t private_f_compare_utf_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
+
+    f_array_length_t i1 = offset1;
+    f_array_length_t i2 = offset2;
+
+    f_status_t status = F_none;
+
+    // Skip past leading whitespace in string1.
+    for (; i1 < stop1; ++i1) {
+
+      // Skip past NULL in string1.
+      while (i1 < stop1 && !string1[i1]) ++i1;
+      if (i1 == stop1) break;
+
+      status = f_utf_character_is_whitespace(string1[i1], F_false);
+
+      if (F_status_is_error(status)) {
+
+        // Ignore possibly invalid UTF-8 codes.
+        if (F_status_set_fine(status) != F_maybe) {
+          return status;
+        }
+      }
+
+      if (status == F_false) break;
+    } // for
+
+    // Skip past leading whitespace in string2.
+    for (; i2 < stop2; i2++) {
+
+      // Skip past NULL in string2.
+      while (i2 < stop2 && !string2[i2]) ++i2;
+      if (i2 == stop2) break;
+
+      status = f_utf_character_is_whitespace(string2[i2], F_false);
+
+      if (F_status_is_error(status)) {
+
+        // Ignore possibly invalid UTF-8 codes.
+        if (F_status_set_fine(status) != F_maybe) {
+          return status;
+        }
+      }
+
+      if (status == F_false) break;
+    } // for
+
+    f_array_length_t last1 = i1;
+    f_array_length_t last2 = i2;
+
+    {
+      // The size1 and size2 are to represent to total number of characters after trim.
+      f_array_length_t size1 = 0;
+      f_array_length_t size2 = 0;
+      f_array_length_t j = 0;
+
+      // Determine where the last non-whitespace is in string1.
+      for (j = i1; j < stop1; ++j) {
+
+        // Skip past NULL in string1.
+        while (j < stop1 && !string1[j]) ++j;
+        if (j == stop1) break;
+
+        status = f_utf_character_is_whitespace(string1[j], F_false);
+
+        if (F_status_is_error(status)) {
+          // ignore possibly invalid UTF-8 codes.
+          if (F_status_set_fine(status) != F_maybe) {
+            return status;
+          }
+        }
+
+        if (status == F_false) {
+          last1 = j;
+          ++size1;
+        }
+      } // for
+
+      // Determine where the last non-whitespace is in string2.
+      for (j = i2; j < stop2; ++j) {
+
+        // Skip past NULL in string2.
+        while (j < stop2 && !string2[j]) ++j;
+        if (j == stop2) break;
+
+        status = f_utf_character_is_whitespace(string2[j], F_false);
+
+        if (F_status_is_error(status)) {
+
+          // Ignore possibly invalid UTF-8 codes.
+          if (F_status_set_fine(status) != F_maybe) {
+            return status;
+          }
+        }
+
+        if (status == F_false) {
+          last2 = j;
+          ++size2;
+        }
+      } // for
+
+      if (size1 != size2) {
+        return F_equal_to_not;
+      }
+    }
+
+    for (; i1 < last1 && i2 < last2; ++i1, ++i2) {
+
+      // Skip past NULL in string1.
+      while (i1 < last1 && !string1[i1]) ++i1;
+      if (i1 == last1) break;
+
+      // Skip past NULL in string2.
+      while (i2 < last2 && !string2[i2]) ++i2;
+      if (i2 == last2) break;
+
+      if (string1[i1] != string2[i2]) return F_equal_to_not;
+    } // for
+
+    // Only return F_equal_to if all remaining characters are NULL.
+    for (; i1 < last1; ++i1) {
+      if (string1[i1] != 0) return F_equal_to_not;
+    } // for
+
+    for (; i2 < last2; ++i2) {
+      if (string2[i2] != 0) return F_equal_to_not;
+    } // for
+
+    return F_equal_to;
+  }
+#endif // !defined(_di_f_compare_utf_trim_) || !defined(_di_f_compare_utf_dynamic_trim_) || !defined(_di_f_compare_utf_dynamic_partial_trim_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/c/compare/private-utf.h b/level_0/f_compare/c/compare/private-utf.h
new file mode 100644 (file)
index 0000000..cd2f0b1
--- /dev/null
@@ -0,0 +1,89 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Compare
+ * 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_F_compare_utf_h
+#define _PRIVATE_F_compare_utf_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Private implementation of fl_utf_compare().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param offset1
+ *   Offset of string1 to start at.
+ * @param offset2
+ *   Offset of string2 to start at.
+ * @param stop1
+ *   Exclusive stop position for string1.
+ * @param stop2
+ *   Exclusive stop position for string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ * @see f_compare_utf()
+ * @see f_compare_utf_dynamic()
+ * @see f_compare_utf_dynamic_partial()
+ */
+#if !defined(_di_f_compare_utf_) || !defined(_di_f_compare_utf_dynamic_) || !defined(_di_f_compare_utf_dynamic_partial_)
+  extern f_status_t private_f_compare_utf(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_compare_utf_) || !defined(_di_f_compare_utf_dynamic_) || !defined(_di_f_compare_utf_dynamic_partial_)
+
+/**
+ * Private implementation of f_compare_utf_trim().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param offset1
+ *   Offset of string1 to start at.
+ * @param offset2
+ *   Offset of string2 to start at.
+ * @param stop1
+ *   Exclusive stop position for string1.
+ * @param stop2
+ *   Exclusive stop position for string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace()
+ *
+ * @see f_utf_character_is_whitespace()
+ * @see f_compare_utf_trim()
+ * @see f_compare_utf_dynamic_trim()
+ * @see f_compare_utf_dynamic_partial_trim()
+ */
+#if !defined(_di_f_compare_utf_trim_) || !defined(_di_f_compare_utf_dynamic_trim_) || !defined(_di_f_compare_utf_dynamic_partial_trim_)
+  extern f_status_t private_f_compare_utf_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_compare_utf_trim_) || !defined(_di_f_compare_utf_dynamic_trim_) || !defined(_di_f_compare_utf_dynamic_partial_trim_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _PRIVATE_F_compare_utf_h
diff --git a/level_0/f_compare/c/compare/utf.c b/level_0/f_compare/c/compare/utf.c
new file mode 100644 (file)
index 0000000..b4ff316
--- /dev/null
@@ -0,0 +1,60 @@
+#include "../compare.h"
+#include "private-utf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_compare_utf_
+  f_status_t f_compare_utf(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
+
+    return private_f_compare_utf(string1, string2, 0, 0, length1, length2);
+  }
+#endif // _di_f_compare_utf_
+
+#ifndef _di_f_compare_utf_dynamic_
+  f_status_t f_compare_utf_dynamic(const f_utf_string_static_t string1, const f_utf_string_static_t string2) {
+
+    return private_f_compare_utf(string1.string, string2.string, 0, 0, string1.used, string2.used);
+  }
+#endif // _di_f_compare_utf_dynamic_
+
+#ifndef _di_f_compare_utf_dynamic_trim_
+  f_status_t f_compare_utf_dynamic_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2) {
+
+    return private_f_compare_utf_trim(string1.string, string2.string, 0, 0, string1.used, string2.used);
+  }
+#endif // _di_f_compare_utf_dynamic_trim_
+
+#ifndef _di_f_compare_utf_dynamic_partial_
+  f_status_t f_compare_utf_dynamic_partial(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
+    #ifndef _di_level_0_parameter_checking_
+      if (string1.used <= range1.stop) return F_status_set_error(F_parameter);
+      if (string2.used <= range2.stop) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    return private_f_compare_utf(string1.string, string2.string, range1.start, range2.start, range1.stop + 1, range2.stop + 1);
+  }
+#endif // _di_f_compare_utf_dynamic_partial_
+
+#ifndef _di_f_compare_utf_dynamic_partial_trim_
+  f_status_t f_compare_utf_dynamic_partial_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
+    #ifndef _di_level_0_parameter_checking_
+      if (string1.used <= range1.stop) return F_status_set_error(F_parameter);
+      if (string2.used <= range2.stop) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    return private_f_compare_utf_trim(string1.string, string2.string, range1.start, range2.start, range1.stop + 1, range2.stop + 1);
+  }
+#endif // _di_f_compare_utf_dynamic_partial_trim_
+
+#ifndef _di_f_compare_utf_trim_
+  f_status_t f_compare_utf_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
+
+    return private_f_compare_utf_trim(string1, string2, 0, 0, length1, length2);
+  }
+#endif // _di_f_compare_utf_trim_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/c/compare/utf.h b/level_0/f_compare/c/compare/utf.h
new file mode 100644 (file)
index 0000000..ffec18a
--- /dev/null
@@ -0,0 +1,180 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Compare
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides basic UTF-8 string comparison capabilities.
+ */
+#ifndef _F_compare_utf_h
+#define _F_compare_utf_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Compare two UTF-8 strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   Length of string1.
+ * @param length2
+ *   Length of string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_utf_
+  extern f_status_t f_compare_utf(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
+#endif // _di_f_compare_utf_
+
+/**
+ * Compare two UTF-8 strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ */
+#ifndef _di_f_compare_utf_dynamic_
+  extern f_status_t f_compare_utf_dynamic(const f_utf_string_static_t string1, const f_utf_string_static_t string2);
+#endif // _di_f_compare_utf_dynamic_
+
+/**
+ * Compare two UTF-8 strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace().
+ *
+ * @see f_utf_character_is_whitespace()
+ */
+#ifndef _di_f_compare_utf_dynamic_trim_
+  extern f_status_t f_compare_utf_dynamic_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2);
+#endif // _di_f_compare_utf_dynamic_trim_
+
+/**
+ * Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range1
+ *   A range within the string1 to restrict the comparison to.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ */
+#ifndef _di_f_compare_utf_dynamic_partial_
+  extern f_status_t f_compare_utf_dynamic_partial(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2);
+#endif // _di_f_compare_utf_dynamic_partial_
+
+/**
+ * Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param range1
+ *   A range within the string1 to restrict the comparison to.
+ * @param range2
+ *   A range within the string2 to restrict the comparison to.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace().
+ *
+ * @see f_utf_character_is_whitespace()
+ */
+#ifndef _di_f_compare_utf_dynamic_partial_trim_
+  extern f_status_t f_compare_utf_dynamic_partial_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2);
+#endif // _di_f_compare_utf_dynamic_partial_trim_
+
+/**
+ * Compare two UTF-8 strings, similar to strncmp().
+ *
+ * This does not stop on NULL.
+ * NULL characters are ignored.
+ * Ignores leading and trailing whitespace.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param length1
+ *   Length of string1.
+ * @param length2
+ *   Length of string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace().
+ *
+ * @see f_utf_character_is_whitespace()
+ */
+#ifndef _di_f_compare_utf_trim_
+  extern f_status_t f_compare_utf_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
+#endif // _di_f_compare_utf_trim_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_compare_utf_h
similarity index 72%
rename from level_1/fl_string/c/private-string.c
rename to level_0/f_compare/c/private-compare.c
index 3d1315d53a184b05b9fc217ddbc7dfe09b3b4fe2..a3e9626d0c2efecc6d317fb5e500cf80db5934f1 100644 (file)
@@ -1,12 +1,12 @@
-#include "string.h"
-#include "private-string.h"
+#include "compare.h"
+#include "private-compare.h"
 
 #ifdef __cplusplus
 extern "C" {
 #endif
 
-#if !defined(_di_fl_string_compare_) || !defined(_di_fl_string_dynamic_compare_) || !defined(_di_fl_string_dynamic_compare_string_) || !defined(_di_fl_string_dynamic_partial_compare_) || !defined(_di_fl_string_dynamic_partial_compare_dynamic_)
-  f_status_t private_fl_string_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
+#if !defined(_di_f_compare_) || !defined(_di_f_compare_dynamic_) || !defined(_di_f_compare_dynamic_string_) || !defined(_di_f_compare_dynamic_partial_) || !defined(_di_f_compare_dynamic_partial_dynamic_)
+  f_status_t private_f_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
 
     f_array_length_t i1 = offset1;
     f_array_length_t i2 = offset2;
@@ -35,10 +35,10 @@ extern "C" {
 
     return F_equal_to;
   }
-#endif // !defined(_di_fl_string_compare_) || !defined(_di_fl_string_dynamic_compare_) || !defined(_di_fl_string_dynamic_compare_string_) || !defined(_di_fl_string_dynamic_partial_compare_) || !defined(_di_fl_string_dynamic_partial_compare_dynamic_)
+#endif // !defined(_di_f_compare_) || !defined(_di_f_compare_dynamic_) || !defined(_di_f_compare_dynamic_string_) || !defined(_di_f_compare_dynamic_partial_) || !defined(_di_f_compare_dynamic_partial_dynamic_)
 
-#if !defined(_di_fl_string_compare_except_) || !defined(_di_fl_string_dynamic_compare_except_) || !defined(_di_fl_string_dynamic_partial_compare_except_)
-  f_status_t private_fl_string_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+#if !defined(_di_f_compare_except_) || !defined(_di_f_compare_dynamic_except_) || !defined(_di_f_compare_dynamic_partial_except_)
+  f_status_t private_f_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
 
     f_array_length_t i1 = offset1;
     f_array_length_t i2 = offset2;
@@ -105,10 +105,10 @@ extern "C" {
 
     return F_equal_to;
   }
-#endif // !defined(_di_fl_string_compare_except_) || !defined(_di_fl_string_dynamic_compare_except_) || !defined(_di_fl_string_dynamic_partial_compare_except_)
+#endif // !defined(_di_f_compare_except_) || !defined(_di_f_compare_dynamic_except_) || !defined(_di_f_compare_dynamic_partial_except_)
 
-#if !defined(_di_fl_string_compare_except_trim_) || !defined(_di_fl_string_dynamic_compare_except_trim_) || !defined(_di_fl_string_dynamic_partial_compare_except_trim_)
-  f_status_t private_fl_string_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
+#if !defined(_di_f_compare_except_trim_) || !defined(_di_f_compare_dynamic_except_trim_) || !defined(_di_f_compare_dynamic_partial_except_trim_)
+  f_status_t private_f_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
 
     f_array_length_t i1 = offset1;
     f_array_length_t i2 = offset2;
@@ -390,10 +390,10 @@ extern "C" {
 
     return F_equal_to;
   }
-#endif // !defined(_di_fl_string_compare_except_trim_) || !defined(_di_fl_string_dynamic_compare_except_trim_) || !defined(_di_fl_string_dynamic_partial_compare_except_trim_)
+#endif // !defined(_di_f_compare_except_trim_) || !defined(_di_f_compare_dynamic_except_trim_) || !defined(_di_f_compare_dynamic_partial_except_trim_)
 
-#if !defined(_di_fl_string_compare_trim_) || !defined(_di_fl_string_dynamic_compare_trim_) || !defined(_di_fl_string_dynamic_partial_compare_trim_)
-  f_status_t private_fl_string_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
+#if !defined(_di_f_compare_trim_) || !defined(_di_f_compare_dynamic_trim_) || !defined(_di_f_compare_dynamic_partial_trim_)
+  f_status_t private_f_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
 
     f_array_length_t i1 = offset1;
     f_array_length_t i2 = offset2;
@@ -603,116 +603,7 @@ extern "C" {
 
     return F_equal_to;
   }
-#endif // !defined(_di_fl_string_compare_trim_) || !defined(_di_fl_string_dynamic_compare_trim_) || !defined(_di_fl_string_dynamic_partial_compare_trim_)
-
-#if !defined(_di_fl_string_dynamic_partial_rip_) || !defined(_di_fl_string_dynamic_partial_rip_nulless_) || !defined(_di_fl_string_dynamic_rip_)  || !defined(_di_fl_string_rip_) || !defined(_di_fl_string_rip_nulless_)
-  f_status_t private_fl_string_rip_find_range(const f_string_t string, f_array_length_t * const start, f_array_length_t * const stop) {
-
-    const f_array_length_t stop_original = *stop;
-    f_array_length_t previous = 0;
-    f_status_t status = F_none;
-
-    // Skip past leading whitespace.
-    for (; *start <= *stop; *start += macro_f_utf_byte_width(string[*start])) {
-
-      // Skip past NULL.
-      while (*start < *stop && !string[*start]) ++(*start);
-      if (*start > *stop) break;
-
-      status = f_utf_is_whitespace(string + *start, (*stop - *start) + 1, F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_parameter) return status;
-
-        break;
-      }
-
-      if (status == F_false) break;
-
-      status = f_utf_is_combining(string + *start, (*stop - *start) + 1);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_parameter) return status;
-
-        break;
-      }
-
-      // This is a combining character, so the previous character is no longer considered a space.
-      if (status == F_true) {
-        *start = previous;
-
-        break;
-      }
-
-      previous = *start;
-    } // for
-
-    // Use previous as boolean here to designate that a combining is found in a previous character.
-    for (previous = F_false; *stop > *start; --(*stop)) {
-
-      // Skip past NULL.
-      while (*stop > *start && !string[*stop]) --(*stop);
-
-      if (!string[*stop]) continue;
-      if (*stop == *start) break;
-
-      // Go left until either width is 0 (ASCII, or > 1) to determine the character.
-      for (;;) {
-
-        if (macro_f_utf_byte_width_is(string[*stop]) == 1) {
-          --(*stop);
-
-          if (*stop == *start) break;
-        }
-        else {
-          break;
-        }
-      } // for
-
-      if (*stop == *start) break;
-
-      status = f_utf_is_whitespace(string + *stop, (stop_original - *stop) + 1, F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_parameter) return status;
-
-        break;
-      }
-
-      if (status == F_false) break;
-      if (status == F_true && previous == F_true) break;
-
-      previous = F_false;
-
-      status = f_utf_is_combining(string + *stop, (stop_original - *stop) + 1);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_parameter) return status;
-
-        break;
-      }
-
-      // This is a combining character, so the next character is no longer considered a space.
-      if (status == F_true) {
-        previous = F_true;
-      }
-    } // for
-
-    if (*stop == *start) {
-      status = f_utf_is_whitespace(string + *stop, (stop_original - *stop) + 1, F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_parameter) return status;
-      }
-
-      if (status == F_true) {
-        return F_data_not;
-      }
-    }
-
-    return F_none;
-  }
-#endif // !defined(_di_fl_string_dynamic_partial_rip_) || !defined(_di_fl_string_dynamic_partial_rip_nulless_) || !defined(_di_fl_string_dynamic_rip_)  || !defined(_di_fl_string_rip_) || !defined(_di_fl_string_rip_nulless_)
+#endif // !defined(_di_f_compare_trim_) || !defined(_di_f_compare_dynamic_trim_) || !defined(_di_f_compare_dynamic_partial_trim_)
 
 #ifdef __cplusplus
 } // extern "C"
diff --git a/level_0/f_compare/c/private-compare.h b/level_0/f_compare/c/private-compare.h
new file mode 100644 (file)
index 0000000..fa189fa
--- /dev/null
@@ -0,0 +1,172 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Compare
+ * 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_F_compare_h
+#define _PRIVATE_F_compare_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Private implementation of f_compare().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param offset1
+ *   Offset of string1 to start at.
+ * @param offset2
+ *   Offset of string2 to start at.
+ * @param stop1
+ *   Exclusive stop position for string1.
+ * @param stop2
+ *   Exclusive stop position for string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ * @see f_compare()
+ * @see f_compare_dynamic()
+ * @see f_compare_dynamic_string()
+ * @see f_compare_dynamic_partial()
+ * @see f_compare_dynamic_partial_dynamic()
+ */
+#if !defined(_di_f_compare_) || !defined(_di_f_compare_dynamic_) || !defined(_di_f_compare_dynamic_string_) || !defined(_di_f_compare_dynamic_partial_) || !defined(_di_f_compare_dynamic_partial_dynamic_)
+  extern f_status_t private_f_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_compare_) || !defined(_di_f_compare_dynamic_) || !defined(_di_f_compare_dynamic_string_) || !defined(_di_f_compare_dynamic_partial_) || !defined(_di_f_compare_dynamic_partial_dynamic_)
+
+/**
+ * Private implementation of f_compare_except().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param offset1
+ *   Offset of string1 to start at.
+ * @param offset2
+ *   Offset of string2 to start at.
+ * @param stop1
+ *   Exclusive stop position for string1.
+ * @param stop2
+ *   Exclusive stop position for string2.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ * @see f_compare_except()
+ * @see f_compare_dynamic_except()
+ * @see f_compare_dynamic_partial_except()
+ */
+#if !defined(_di_f_compare_except_) || !defined(_di_f_compare_dynamic_except_) || !defined(_di_f_compare_dynamic_partial_except_)
+  extern f_status_t private_f_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_compare_except_) || !defined(_di_f_compare_dynamic_except_) || !defined(_di_f_compare_dynamic_partial_except_)
+
+/**
+ * Private implementation of f_compare_except_trim().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param offset1
+ *   Offset of string1 to start at.
+ * @param offset2
+ *   Offset of string2 to start at.
+ * @param stop1
+ *   Exclusive stop position for string1.
+ * @param stop2
+ *   Exclusive stop position for string2.
+ * @param except1
+ *   A set of locations within string1 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ * @param except2
+ *   A set of locations within string2 to ignore.
+ *   This assumes/requires that the locations be in linear order.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_utf_not (with error bit) if a character is not valid UTF-8.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ *
+ * @see f_compare_except_trim()
+ * @see f_compare_dynamic_except_trim()
+ * @see f_compare_dynamic_partial_except_trim()
+ */
+#if !defined(_di_f_compare_except_trim_) || !defined(_di_f_compare_dynamic_except_trim_) || !defined(_di_f_compare_dynamic_partial_except_trim_)
+  extern f_status_t private_f_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_compare_except_trim_) || !defined(_di_f_compare_dynamic_except_trim_) || !defined(_di_f_compare_dynamic_partial_except_trim_)
+
+/**
+ * Private implementation of f_compare_trim().
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string1
+ *   String to compare.
+ * @param string2
+ *   String to compare.
+ * @param offset1
+ *   Offset of string1 to start at.
+ * @param offset2
+ *   Offset of string2 to start at.
+ * @param stop1
+ *   Exclusive stop position for string1.
+ * @param stop2
+ *   Exclusive stop position for string2.
+ *
+ * @return
+ *   F_equal_to when both strings equal.
+ *   F_equal_to_not when both strings do not equal.
+ *
+ *   F_utf_not (with error bit) if a character is not valid UTF-8.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ *
+ * @see f_compare_trim()
+ * @see f_compare_dynamic_trim()
+ * @see f_compare_dynamic_partial_trim()
+ */
+#if !defined(_di_f_compare_trim_) || !defined(_di_f_compare_dynamic_trim_) || !defined(_di_f_compare_dynamic_partial_trim_)
+  extern f_status_t private_f_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_compare_trim_) || !defined(_di_f_compare_dynamic_trim_) || !defined(_di_f_compare_dynamic_partial_trim_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _PRIVATE_F_compare_h
similarity index 91%
rename from level_1/fl_string/data/build/defines
rename to level_0/f_compare/data/build/defines
index c6653172ef1e71eb1aff738b1cbad4300feeacd6..4f130804d83cb5bf412c3e349a4ac790b2b825ca 100644 (file)
@@ -1,2 +1 @@
 # fss-0000
-
diff --git a/level_0/f_compare/data/build/dependencies-tests b/level_0/f_compare/data/build/dependencies-tests
new file mode 100644 (file)
index 0000000..dea3179
--- /dev/null
@@ -0,0 +1,3 @@
+# fss-0001
+
+cmocka 1.*
diff --git a/level_0/f_compare/data/build/settings b/level_0/f_compare/data/build/settings
new file mode 100644 (file)
index 0000000..f8e2e04
--- /dev/null
@@ -0,0 +1,58 @@
+# fss-0001
+
+build_name f_compare
+
+version_major 0
+version_minor 7
+version_micro 0
+version_file micro
+version_target minor
+
+modes individual clang test coverage
+modes_default individual
+
+build_compiler gcc
+build_compiler-clang clang
+build_indexer ar
+build_indexer_arguments rcs
+build_language c
+
+build_libraries -lc
+build_libraries-individual -lf_memory -lf_string -lf_utf
+
+build_sources_library compare.c compare/utf.c private-compare.c compare/private-utf.c
+
+build_sources_headers compare.h compare/utf.h
+
+build_script yes
+build_shared yes
+build_static no
+
+path_headers fll/level_0
+path_library_script script
+path_library_shared shared
+path_library_static static
+path_object_script script
+path_object_shared shared
+path_object_static static
+path_program_script script
+path_program_shared shared
+path_program_static static
+
+has_path_standard yes
+preserve_path_headers yes
+
+search_exclusive yes
+search_shared yes
+search_static yes
+
+environment PATH LD_LIBRARY_PATH
+
+flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags-clang -Wno-logical-op-parentheses
+flags-test -O0 -fstack-protector -Wall
+flags-coverage -O0 --coverage -fprofile-abs-path -fprofile-dir=build/coverage/
+
+flags_library -fPIC
+flags_object -fPIC
+flags_program -fPIE
diff --git a/level_0/f_compare/data/build/settings-tests b/level_0/f_compare/data/build/settings-tests
new file mode 100644 (file)
index 0000000..acf4512
--- /dev/null
@@ -0,0 +1,54 @@
+# fss-0001
+#
+# Builds a program that is links to the generated library and is executed to perform tests.
+#
+# Memory leaks in the test program can be checked for by running valgrind with this executable.
+#
+
+build_name test-f_compare
+
+version_major 0
+version_minor 7
+version_micro 0
+version_file major
+version_target major
+
+modes individual clang test coverage
+modes_default individual test
+
+build_compiler gcc
+build_compiler-clang clang
+build_indexer ar
+build_indexer_arguments rcs
+build_language c
+
+build_libraries -lc -lcmocka
+build_libraries-individual -lf_memory -lf_string -lf_utf -lf_compare
+
+build_sources_program test-compare-.c test-compare-dynamic.c test-compare-dynamic_string.c
+build_sources_program test-compare.c
+
+build_script no
+build_shared yes
+build_static no
+
+path_headers tests/unit/c
+path_sources tests/unit/c
+
+has_path_standard no
+preserve_path_headers yes
+
+search_exclusive yes
+search_shared yes
+search_static yes
+
+defines -Ibuild/includes
+defines_static -Lbuild/libraries/static
+defines_shared -Lbuild/libraries/shared
+
+flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags-clang -Wno-logical-op-parentheses
+flags-test -fstack-protector -Wall
+flags-coverage -O0 --coverage -fprofile-abs-path -fprofile-dir=build/coverage/
+
+flags_program -fPIE
diff --git a/level_0/f_compare/data/build/testfile b/level_0/f_compare/data/build/testfile
new file mode 100644 (file)
index 0000000..c228fed
--- /dev/null
@@ -0,0 +1,55 @@
+# fss-0005 iki-0002
+
+settings:
+  load_build yes
+  fail exit
+
+  environment PATH LD_LIBRARY_PATH
+  environment CMOCKA_XML_FILE CMOCKA_MESSAGE_OUTPUT CMOCKA_TEST_ABORT
+
+  # Cmcka is not fully thread-safe, set this to "1" to have cmocka call abort() on a test failure.
+  #CMOCKA_TEST_ABORT 1
+
+  # One of: STDOUT, SUBUNIT, TAP, or XML.
+  #define CMOCKA_MESSAGE_OUTPUT STDOUT
+
+  # When in "XML" output mode, output to this file rather than stdout.
+  #define CMOCKA_XML_FILE ./out.xml
+
+main:
+  build settings individual test
+  build settings-tests individual test
+
+  operate ld_library_path
+
+  if exist build/programs/shared/test-f_compare
+    shell build/programs/shared/test-f_compare
+
+  if exist build/programs/static/test-f_compare
+    shell build/programs/static/test-f_compare
+
+  if not exist build/programs/shared/test-f_compare
+  and not exist build/programs/static/test-f_compare
+    operate not_created
+
+not_created:
+  print
+  print 'context:"error"Failed to test due to being unable to find either a shared or static test binary to perform tests. context:"reset"'
+
+  exit failure
+
+ld_library_path:
+  if define LD_LIBRARY_PATH
+  and parameter work
+    define LD_LIBRARY_PATH 'build/libraries/shared:parameter:"work:value"libraries/shared:define:"LD_LIBRARY_PATH"'
+
+  else
+  if define LD_LIBRARY_PATH
+    define LD_LIBRARY_PATH 'build/libraries/shared:define:"LD_LIBRARY_PATH"'
+
+  else
+  if parameter work
+    define LD_LIBRARY_PATH 'build/libraries/shared:parameter:"work:value"libraries/shared'
+
+  else
+    define LD_LIBRARY_PATH build/libraries/shared
diff --git a/level_0/f_compare/tests/unit/c/test-compare-.c b/level_0/f_compare/tests/unit/c/test-compare-.c
new file mode 100644 (file)
index 0000000..64bc01e
--- /dev/null
@@ -0,0 +1,269 @@
+#include "test-compare.h"
+#include "test-compare-.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void test__f_compare___works(void **state) {
+
+  const f_string_static_t string_1s[] = {
+
+    // 1.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+
+    // 2.
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+
+    // 3.
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+
+    // 4.
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+
+    // 5.
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+
+    // 6.
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+
+    // 7.
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+
+    // 8.
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+  };
+
+  const f_string_static_t string_2s[] = {
+
+    // 1.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 2.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 3.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 4.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 5.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 6.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 7.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 8.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+  };
+
+  const f_status_t expects[] = {
+
+    // 1.
+    F_equal_to,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 2.
+    F_equal_to,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 3.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 4.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+
+    // 5.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 6.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 7.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+
+    // 8.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+  };
+
+  for (uint8_t i = 0; i < 64; ++i) {
+
+    const f_status_t status = f_compare(string_1s[i].string, string_2s[i].string, string_1s[i].used, string_2s[i].used);
+
+    assert_int_equal(status, expects[i]);
+  } // for
+}
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/tests/unit/c/test-compare-.h b/level_0/f_compare/tests/unit/c/test-compare-.h
new file mode 100644 (file)
index 0000000..e4169df
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Control Group
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Test the compare project.
+ */
+#ifndef _TEST__F_compare__h
+#define _TEST__F_compare__h
+
+// f_compare_() only returns memory failures.
+
+/**
+ * Test that function works.
+ *
+ * @see f_compare()
+ */
+extern void test__f_compare___works(void **state);
+
+#endif // _TEST__F_compare__h
diff --git a/level_0/f_compare/tests/unit/c/test-compare-dynamic.c b/level_0/f_compare/tests/unit/c/test-compare-dynamic.c
new file mode 100644 (file)
index 0000000..8fc2da0
--- /dev/null
@@ -0,0 +1,269 @@
+#include "test-compare.h"
+#include "test-compare-dynamic.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void test__f_compare_dynamic__works(void **state) {
+
+  const f_string_static_t string_1s[] = {
+
+    // 1.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+
+    // 2.
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+
+    // 3.
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+
+    // 4.
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+
+    // 5.
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+
+    // 6.
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+
+    // 7.
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+
+    // 8.
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+  };
+
+  const f_string_static_t string_2s[] = {
+
+    // 1.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 2.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 3.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 4.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 5.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 6.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 7.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 8.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+  };
+
+  const f_status_t expects[] = {
+
+    // 1.
+    F_equal_to,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 2.
+    F_equal_to,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 3.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 4.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+
+    // 5.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 6.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 7.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+
+    // 8.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+  };
+
+  for (uint8_t i = 0; i < 64; ++i) {
+
+    const f_status_t status = f_compare_dynamic(string_1s[i], string_2s[i]);
+
+    assert_int_equal(status, expects[i]);
+  } // for
+}
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/tests/unit/c/test-compare-dynamic.h b/level_0/f_compare/tests/unit/c/test-compare-dynamic.h
new file mode 100644 (file)
index 0000000..58bd223
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Control Group
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Test the compare project.
+ */
+#ifndef _TEST__F_compare_dynamic_h
+#define _TEST__F_compare_dynamic_h
+
+// f_compare_() only returns memory failures.
+
+/**
+ * Test that function works.
+ *
+ * @see f_compare()
+ */
+extern void test__f_compare_dynamic__works(void **state);
+
+#endif // _TEST__F_compare_dynamic_h
diff --git a/level_0/f_compare/tests/unit/c/test-compare-dynamic_string.c b/level_0/f_compare/tests/unit/c/test-compare-dynamic_string.c
new file mode 100644 (file)
index 0000000..0639602
--- /dev/null
@@ -0,0 +1,269 @@
+#include "test-compare.h"
+#include "test-compare-dynamic_string.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+void test__f_compare_dynamic_string__works(void **state) {
+
+  const f_string_static_t string_1s[] = {
+
+    // 1.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize(0, 0, 0),
+
+    // 2.
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+
+    // 3.
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("1", 0, 1),
+
+    // 4.
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("one", 0, 3),
+
+    // 5.
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+
+    // 6.
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+
+    // 7.
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+
+    // 8.
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+  };
+
+  const f_string_static_t string_2s[] = {
+
+    // 1.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 2.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 3.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 4.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 5.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 6.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 7.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+
+    // 8.
+    macro_f_string_static_t_initialize(0, 0, 0),
+    macro_f_string_static_t_initialize("", 0, 0),
+    macro_f_string_static_t_initialize("1", 0, 1),
+    macro_f_string_static_t_initialize("one", 0, 3),
+    macro_f_string_static_t_initialize("One", 0, 3),
+    macro_f_string_static_t_initialize("\0ne", 0, 3),
+    macro_f_string_static_t_initialize("o\0ne", 0, 4),
+    macro_f_string_static_t_initialize("one\0", 0, 4),
+  };
+
+  const f_status_t expects[] = {
+
+    // 1.
+    F_equal_to,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 2.
+    F_equal_to,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 3.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 4.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+
+    // 5.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 6.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+
+    // 7.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+
+    // 8.
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to_not,
+    F_equal_to_not,
+    F_equal_to,
+    F_equal_to,
+  };
+
+  for (uint8_t i = 0; i < 64; ++i) {
+
+    const f_status_t status = f_compare_dynamic_string(string_1s[i].string, string_2s[i], string_1s[i].used);
+
+    assert_int_equal(status, expects[i]);
+  } // for
+}
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/tests/unit/c/test-compare-dynamic_string.h b/level_0/f_compare/tests/unit/c/test-compare-dynamic_string.h
new file mode 100644 (file)
index 0000000..f711961
--- /dev/null
@@ -0,0 +1,22 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Control Group
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Test the compare project.
+ */
+#ifndef _TEST__F_compare_dynamic_string_h
+#define _TEST__F_compare_dynamic_string_h
+
+// f_compare_() only returns memory failures.
+
+/**
+ * Test that function works.
+ *
+ * @see f_compare()
+ */
+extern void test__f_compare_dynamic_string__works(void **state);
+
+#endif // _TEST__F_compare_dynamic_string_h
diff --git a/level_0/f_compare/tests/unit/c/test-compare.c b/level_0/f_compare/tests/unit/c/test-compare.c
new file mode 100644 (file)
index 0000000..631d440
--- /dev/null
@@ -0,0 +1,79 @@
+#include "test-compare.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+int setup(void **state) {
+
+  return 0;
+}
+
+int setdown(void **state) {
+
+  errno = 0;
+
+  return 0;
+}
+
+int main(void) {
+
+  const struct CMUnitTest tests[] = {
+
+    cmocka_unit_test(test__f_compare___works),
+    cmocka_unit_test(test__f_compare_dynamic__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_dynamic__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_except__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_except_dynamic__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_except_string__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_except_trim__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_except_trim_dynamic__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_except_trim_string__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_string__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_trim_dynamic__works),
+    //cmocka_unit_test(test__f_compare_dynamic_partial_trim_string__works),
+    cmocka_unit_test(test__f_compare_dynamic_string__works),
+    //cmocka_unit_test(test__f_compare_dynamic_trim__works),
+    //cmocka_unit_test(test__f_compare_dynamic_trim_string__works),
+    //cmocka_unit_test(test__f_compare_dynamic_except__works),
+    //cmocka_unit_test(test__f_compare_dynamic_except_string__works),
+    //cmocka_unit_test(test__f_compare_dynamic_except_trim__works),
+    //cmocka_unit_test(test__f_compare_except__works),
+    //cmocka_unit_test(test__f_compare_except_trim__works),
+    //cmocka_unit_test(test__f_compare_except_trim_string__works),
+    //cmocka_unit_test(test__f_compare_trim__works),
+
+    #ifndef _di_level_0_parameter_checking_
+      // f_compare() doesn't use parameter checking.
+      // f_compare_dynamic() doesn't use parameter checking.
+      //cmocka_unit_test(test__f_compare_dynamic__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_dynamic__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_except__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_except_dynamic__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_except_string__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_except_trim__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_except_trim_dynamic__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_except_trim_string__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_string__parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_partial_trim_dynamic__parameter_checking),
+      // f_compare_dynamic_string() doesn't use parameter checking.
+      // f_compare_dynamic_trim() doesn't use parameter checking.
+      // f_compare_dynamic_trim_string() doesn't use parameter checking.
+      //cmocka_unit_test(test__f_compare_dynamic_except___parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_except_string___parameter_checking),
+      //cmocka_unit_test(test__f_compare_dynamic_except_trim___parameter_checking),
+      //cmocka_unit_test(test__f_compare_except___parameter_checking),
+      //cmocka_unit_test(test__f_compare_except_trim___parameter_checking),
+      //cmocka_unit_test(test__f_compare_except_trim_string___parameter_checking),
+      //cmocka_unit_test(test__f_compare_trim___parameter_checking),
+    #endif // _di_level_0_parameter_checking_
+  };
+
+  return cmocka_run_group_tests(tests, setup, setdown);
+}
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_compare/tests/unit/c/test-compare.h b/level_0/f_compare/tests/unit/c/test-compare.h
new file mode 100644 (file)
index 0000000..596a7f4
--- /dev/null
@@ -0,0 +1,91 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Compare
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Test the compare project.
+ */
+#ifndef _TEST__F_compare_h
+#define _TEST__F_compare_h
+
+// Libc includes.
+#include <stdarg.h>
+#include <stddef.h>
+#include <setjmp.h>
+#include <stdint.h>
+
+// cmocka includes.
+#include <cmocka.h>
+
+// FLL-0 includes.
+#include <fll/level_0/compare.h>
+
+// Test includes.
+#include "test-compare-.h"
+#include "test-compare-dynamic.h"
+//#include "test-compare-dynamic_partial.h"
+//#include "test-compare-dynamic_partial_dynamic.h"
+//#include "test-compare-dynamic_partial_except.h"
+//#include "test-compare-dynamic_partial_except_dynamic.h"
+//#include "test-compare-dynamic_partial_except_string.h"
+//#include "test-compare-dynamic_partial_except_trim.h"
+//#include "test-compare-dynamic_partial_except_trim_dynamic.h"
+//#include "test-compare-dynamic_partial_except_trim_string.h"
+//#include "test-compare-dynamic_partial_string.h"
+//#include "test-compare-dynamic_partial_trim_dynamic.h"
+//#include "test-compare-dynamic_partial_trim_string.h"
+#include "test-compare-dynamic_string.h"
+//#include "test-compare-dynamic_trim.h"
+//#include "test-compare-dynamic_trim_string.h"
+//#include "test-compare-dynamic_except.h"
+//#include "test-compare-dynamic_except_string.h"
+//#include "test-compare-dynamic_except_trim.h"
+//#include "test-compare-except.h"
+//#include "test-compare-except_trim.h"
+//#include "test-compare-except_trim_string.h"
+//#include "test-compare-trim.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Perform any setup operations.
+ *
+ * @param state
+ *   The test state.
+ *
+ * @return
+ *   The status of this function, where 0 means success.
+ */
+extern int setup(void **state);
+
+/**
+ * Peform any setdown operations.
+ *
+ * @param state
+ *   The test state.
+ *
+ * @return
+ *   The status of this function, where 0 means success.
+ */
+extern int setdown(void **state);
+
+/**
+ * Run all tests.
+ *
+ * @return
+ *   The final result of the tests.
+ *
+ * @see cmocka_run_group_tests()
+ * @see cmocka_unit_test()
+ */
+extern int main(void);
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _TEST__F_compare_h
diff --git a/level_0/f_parse/c/parse.c b/level_0/f_parse/c/parse.c
new file mode 100644 (file)
index 0000000..237efb1
--- /dev/null
@@ -0,0 +1,653 @@
+#include "parse.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_parse_dynamic_seek_line_to_utf_character_
+  f_status_t f_parse_dynamic_seek_line_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to_this);
+
+    f_status_t status = F_none;
+
+    unsigned short width = 0;
+    f_array_length_t width_max = 0;
+
+    while (range->start <= range->stop) {
+
+      width_max = (range->stop - range->start) + 1;
+      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
+
+      if (!width) {
+        width = 1;
+
+        if (buffer.string[range->start] == f_string_eol_s.string[0]) return F_none_eol;
+        if (seek_width == width && buffer.string[range->start] == seek_to_this) return F_none;
+      }
+      // Do not operate on UTF-8 fragments that are not the first byte of the character.
+      else if (width == 1) {
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_stop);
+
+        if (width == seek_width) {
+          f_utf_char_t character = 0;
+
+          status = f_utf_char_to_character(buffer.string + range->start, width_max, &character);
+          if (F_status_is_error(status)) return status;
+          if (character == seek_to_this) return F_none;
+        }
+      }
+
+      range->start += width;
+
+      if (range->start >= range->stop) return F_none_stop;
+    } // while
+
+    return F_none_eos;
+  }
+#endif // _di_f_parse_dynamic_seek_line_to_utf_character_
+
+#ifndef _di_f_parse_dynamic_seek_line_until_graph_
+  f_status_t f_parse_dynamic_seek_line_until_graph(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_status_t status = F_none;
+    unsigned short width = 0;
+
+    f_array_length_t width_max = (range->stop - range->start) + 1;
+
+    while (buffer.string[range->start] == placeholder || (status = f_utf_is_graph(buffer.string + range->start, width_max)) == F_false) {
+
+      if (F_status_is_error(status)) return status;
+      if (buffer.string[range->start] == f_string_eol_s.string[0]) return F_none_eol;
+
+      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
+
+      if (!width) {
+        width = 1;
+      }
+      else if (width == 1) {
+
+        // Do not operate on UTF-8 fragments that are not the first byte of the character.
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_stop);
+      }
+
+      range->start += width;
+
+      if (range->start > range->stop) return F_none_stop;
+
+      width_max = (range->stop - range->start) + 1;
+    } // while
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_parse_dynamic_seek_line_until_graph_
+
+#ifndef _di_f_parse_dynamic_seek_line_until_graph_non_
+  f_status_t f_parse_dynamic_seek_line_until_graph_non(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_status_t status = F_none;
+    unsigned short width = 0;
+
+    f_array_length_t width_max = (range->stop - range->start) + 1;
+
+    while (buffer.string[range->start] == placeholder || (status = f_utf_is_whitespace(buffer.string + range->start, width_max, F_false)) == F_false) {
+
+      if (F_status_is_error(status)) return status;
+      if (buffer.string[range->start] == f_string_eol_s.string[0]) return F_none_eol;
+
+      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
+
+      if (!width) {
+        width = 1;
+      }
+      else if (width == 1) {
+
+        // Do not operate on UTF-8 fragments that are not the first byte of the character.
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_stop);
+      }
+
+      range->start += width;
+
+      if (range->start > range->stop) return F_none_stop;
+
+      width_max = (range->stop - range->start) + 1;
+    } // while
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_parse_dynamic_seek_line_until_graph_non_
+
+#ifndef _di_f_parse_dynamic_seek_to_utf_character_
+  f_status_t f_parse_dynamic_seek_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+
+    if (range->start > range->stop) return F_data_not_stop;
+
+    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to_this);
+
+    f_status_t status = F_none;
+
+    unsigned short width = 0;
+
+    f_array_length_t width_max = 0;
+
+    while (range->start <= range->stop) {
+
+      width_max = (range->stop - range->start) + 1;
+      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
+
+      if (!width) {
+        width = 1;
+
+        if (seek_width == width) {
+          if (buffer.string[range->start] == seek_to_this) return F_none;
+        }
+      }
+      // Do not operate on UTF-8 fragments that are not the first byte of the character.
+      else if (width == 1) {
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) {
+          return F_status_set_error(F_complete_not_utf_stop);
+        }
+
+        if (width == seek_width) {
+          f_utf_char_t character = 0;
+
+          status = f_utf_char_to_character(buffer.string + range->start, width_max, &character);
+          if (F_status_is_error(status)) return status;
+          if (character == seek_to_this) return F_none;
+        }
+      }
+
+      range->start += width;
+
+      if (range->start >= range->stop) return F_none_stop;
+    } // while
+
+    return F_none_eos;
+  }
+#endif // _di_f_parse_dynamic_seek_to_utf_character_
+
+#ifndef _di_f_parse_dynamic_partial_fll_identify_
+  f_status_t f_parse_dynamic_partial_fll_identify(const f_string_static_t buffer, f_string_range_t * const range, f_fll_id_t * const id) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (id) {
+      id->type = 0;
+      id->used = 0;
+    }
+
+    // Skip past all leading NULLs.
+    for (; range->start <= range->stop; ++range->start) {
+      if (buffer.string[range->start]) break;
+    } // for
+
+    if (range->start > range->stop) {
+      return F_data_not;
+    }
+
+    // The FLL Identifier is always at least 6 characters ("X-0000").
+    if (range->stop - range->start < 5) {
+
+      // Increment until stop, while taking into consideration UTF-8 character widths.
+      for (; range->start <= range->stop; ) {
+
+        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+          ++range->start;
+
+          break;
+        }
+
+        range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+      } // for
+
+      return F_found_not;
+    }
+
+    f_status_t status = F_none;
+
+    for (; range->start <= range->stop; ) {
+
+      status = f_utf_is_whitespace(buffer.string + range->start, (range->stop - range->start) + 1, F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_maybe) return F_status_set_error(F_complete_not_utf);
+
+        return status;
+      }
+
+      if (status == F_false) {
+        if (!buffer.string[range->start]) {
+          ++range->start;
+
+          continue;
+        }
+
+        break;
+      }
+
+      if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+        ++range->start;
+
+        return F_found_not;
+      }
+
+      range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+    } // for
+
+    if (range->start > range->stop) {
+      return F_found_not;
+    }
+
+    if (range->stop - range->start < 5) {
+
+      // Increment until stop, while taking into consideration UTF-8 character widths.
+      for (; range->start <= range->stop; ) {
+
+        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+          ++range->start;
+
+          break;
+        }
+
+        range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+      } // for
+
+      return F_found_not;
+    }
+
+    f_array_length_t i = range->start;
+
+    for (; range->start <= range->stop; ) {
+
+      status = f_utf_is_word(buffer.string + range->start, (range->stop - range->start) + 1, F_true);
+      if (F_status_is_error(status)) return status;
+
+      if (status == F_false) {
+        if (!buffer.string[range->start]) {
+          ++range->start;
+
+          continue;
+        }
+
+        break;
+      }
+
+      range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+    } // for
+
+    if (range->start > range->stop || buffer.string[range->start] != f_string_ascii_minus_s.string[0]) {
+
+      // Increment until stop, while taking into consideration UTF-8 character widths.
+      for (; range->start <= range->stop; ) {
+
+        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+          ++range->start;
+
+          break;
+        }
+
+        range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+      } // for
+
+      return F_found_not;
+    }
+
+    {
+      f_array_length_t j = 0;
+      f_char_t number[5] = { 0, 0, 0, 0, 0 };
+
+      for (++range->start; range->start <= range->stop && j < 4; ++range->start, ++j) {
+
+        // The hexidecimal representing the number may only be ASCII.
+        if (macro_f_utf_byte_width_is(buffer.string[range->start])) {
+
+          // Increment until stop, while taking into consideration UTF-8 character widths.
+          for (; range->start <= range->stop; ) {
+
+            if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+              ++range->start;
+
+              break;
+            }
+
+            range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+          } // for
+
+          if (id) {
+            id->type = 0;
+          }
+
+          return F_found_not;
+        }
+
+        if (isxdigit(buffer.string[range->start])) {
+          number[j] = buffer.string[range->start];
+        }
+        else {
+          if (!buffer.string[range->start]) continue;
+
+          break;
+        }
+      } // for
+
+      if (j == 4) {
+        if (id) {
+          id->type = strtol(number, 0, 16);
+        }
+      }
+      else {
+
+        // Increment until stop, while taking into consideration UTF-8 character widths.
+        for (; range->start <= range->stop; ) {
+
+          if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+            ++range->start;
+
+            break;
+          }
+
+          range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+        } // for
+
+        if (id) {
+          id->type = 0;
+        }
+
+        return F_found_not;
+      }
+    }
+
+    // Skip past all NULLs.
+    for (; range->start <= range->stop; ++range->start) {
+      if (buffer.string[range->start]) break;
+    } // for
+
+    // The end of line, whitespace, or range stop point are the only valid stop points.
+    if (range->start <= range->stop) {
+      status = f_utf_is_whitespace(buffer.string + range->start, (range->stop - range->start) + 1, F_false);
+
+      if (F_status_is_error(status)) {
+        if (id) {
+          id->type = 0;
+        }
+
+        return status;
+      }
+
+      if (status == F_false) {
+
+        // Increment until stop, while taking into consideration UTF-8 character widths.
+        for (; range->start <= range->stop; ) {
+
+          if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+            ++range->start;
+
+            break;
+          }
+
+          range->start += macro_f_utf_byte_width(buffer.string[range->start]);
+        } // for
+
+        if (id) {
+          id->type = 0;
+        }
+
+        return F_found_not;
+      }
+    }
+
+    if (buffer.string[range->start] == f_string_eol_s.string[0]) {
+      ++range->start;
+    }
+
+    if (id) {
+      for (f_array_length_t j = i, i = 0; j <= range->stop; ++j) {
+
+        if (!buffer.string[j]) continue;
+        if (buffer.string[j] == f_string_ascii_minus_s.string[0]) break;
+
+        id->name[i++] = buffer.string[j];
+      } // for
+
+      id->used = i + 1;
+
+      if (id->used < 64) {
+        id->name[id->used] = 0;
+      }
+    }
+
+    return F_found;
+  }
+#endif // _di_f_parse_dynamic_partial_fll_identify_
+
+#ifndef _di_f_parse_seek_line_to_utf_character_
+  f_status_t f_parse_seek_line_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (range->start > range->stop) {
+      return F_data_not_stop;
+    }
+
+    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to);
+
+    f_status_t status = F_none;
+
+    unsigned short width = 0;
+    f_array_length_t width_max = (range->stop - range->start) + 1;
+
+    for (; range->start <= range->stop; range->start += width) {
+
+      width_max = (range->stop - range->start) + 1;
+
+      width = macro_f_utf_byte_width_is(string[range->start]);
+
+      if (!width) {
+        width = 1;
+
+        if (string[range->start] == f_string_eol_s.string[0]) return F_none_eol;
+        if (seek_width == width && string[range->start] == seek_to) return F_none;
+      }
+      // Do not operate on UTF-8 fragments that are not the first byte of the character.
+      else if (width == 1) {
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_eos);
+
+        if (width == seek_width) {
+          f_utf_char_t character = 0;
+
+          status = f_utf_char_to_character(string + range->start, width_max, &character);
+          if (F_status_is_error(status)) return status;
+          if (character == seek_to) return F_none;
+        }
+      }
+    } // for
+
+    return F_none_stop;
+  }
+#endif // _di_f_parse_seek_line_to_utf_character_
+
+#ifndef _di_f_parse_seek_line_until_graph_
+  f_status_t f_parse_seek_line_until_graph(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_status_t status = F_none;
+    unsigned short width = 0;
+
+    f_array_length_t width_max = (range->stop - range->start) + 1;
+
+    while (string[range->start] == placeholder || (status = f_utf_is_graph(string + range->start, width_max)) == F_false) {
+
+      if (F_status_is_error(status)) return status;
+      if (string[range->start] == f_string_eol_s.string[0]) return F_none_eol;
+
+      width = macro_f_utf_byte_width_is(string[range->start]);
+
+      if (!width) {
+        width = 1;
+      }
+      else if (width == 1) {
+
+        // Do not operate on UTF-8 fragments that are not the first byte of the character.
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_stop);
+      }
+
+      range->start += width;
+
+      if (range->start > range->stop) return F_none_stop;
+
+      width_max = (range->stop - range->start) + 1;
+    } // while
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_parse_seek_line_until_graph_
+
+#ifndef _di_f_parse_seek_line_until_graph_non_
+  f_status_t f_parse_seek_line_until_graph_non(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_status_t status = F_none;
+    unsigned short width = 0;
+
+    f_array_length_t width_max = (range->stop - range->start) + 1;
+
+    while (string[range->start] == placeholder || (status = f_utf_is_whitespace(string + range->start, width_max, F_false)) == F_false) {
+
+      if (F_status_is_error(status)) return status;
+
+      if (string[range->start] == f_string_eol_s.string[0]) return F_none_eol;
+
+      width = macro_f_utf_byte_width_is(string[range->start]);
+
+      if (!width) {
+        width = 1;
+      }
+      else if (width == 1) {
+
+        // Do not operate on UTF-8 fragments that are not the first byte of the character.
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_stop);
+      }
+
+      range->start += width;
+
+      if (range->start > range->stop) return F_none_stop;
+
+      width_max = (range->stop - range->start) + 1;
+    } // while
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_parse_seek_line_until_graph_non_
+
+#ifndef _di_f_parse_seek_to_utf_character_
+  f_status_t f_parse_seek_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (range->start > range->stop) return F_data_not_stop;
+
+    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to);
+
+    f_status_t status = F_none;
+
+    unsigned short width = 0;
+    f_array_length_t width_max = 0;
+
+    for (; range->start <= range->stop; range->start += width) {
+
+      width_max = (range->stop - range->start) + 1;
+
+      width = macro_f_utf_byte_width_is(string[range->start]);
+
+      if (!width) {
+        width = 1;
+
+        if (seek_width == width && string[range->start] == seek_to) return F_none;
+      }
+      // Do not operate on UTF-8 fragments that are not the first byte of the character.
+      else if (width == 1) {
+        return F_status_set_error(F_complete_not_utf);
+      }
+      else {
+        if (range->start + width > range->stop) return F_status_set_error(F_complete_not_utf_stop);
+
+        if (width == seek_width) {
+          f_utf_char_t character = 0;
+
+          status = f_utf_char_to_character(string + range->start, width_max, &character);
+          if (F_status_is_error(status)) return status;
+          if (character == seek_to) return F_none;
+        }
+      }
+    } // for
+
+    return F_none_stop;
+  }
+#endif // _di_f_parse_seek_to_utf_character_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_parse/c/parse.h b/level_0/f_parse/c/parse.h
new file mode 100644 (file)
index 0000000..2ecd78a
--- /dev/null
@@ -0,0 +1,327 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Parse
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides basic string parse capabilities.
+ */
+#ifndef _F_parse_h
+#define _F_parse_h
+
+// Libc includes.
+#include <string.h>
+
+// FLL-0 includes.
+#include <fll/level_0/status.h>
+#include <fll/level_0/memory.h>
+#include <fll/level_0/type.h>
+#include <fll/level_0/utf.h>
+
+// FLL-0 compare includes.
+#include <fll/level_0/parse/utf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Seek the buffer location forward until the character (up to 4-byte wide) or EOL is reached.
+ *
+ * @param buffer
+ *   The string to traverse.
+ * @param seek_to_this
+ *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_stop on success, but stopped at end of range.
+ *   F_data_not on success, but there was no string data to seek.
+ *   F_data_not_stop on success, but the range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
+ *
+ *   Errors (with error bit) from: f_utf_char_to_character().
+ *
+ * @see f_utf_char_to_character()
+ */
+#ifndef _di_f_parse_dynamic_seek_line_to_utf_character_
+  extern f_status_t f_parse_dynamic_seek_line_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range);
+#endif // _di_f_parse_dynamic_seek_line_to_utf_character_
+
+/**
+ * Increment buffer location until a graph character (including UTF-8) or an EOL is matched.
+ *
+ * @param buffer
+ *   The string to traverse.
+ * @param placeholder
+ *   A single-width character representing a placeholder to ignore (may be NULL).
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_stop on success, but stopped at end of range.
+ *   F_data_not on success, but there was no string data to seek.
+ *   F_data_not_stop on success, but the range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_memory_not (with error bit) on out of memory.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_is_graph().
+ *
+ * @see f_utf_is_graph()
+ */
+#ifndef _di_f_parse_dynamic_seek_line_until_graph_
+  extern f_status_t f_parse_dynamic_seek_line_until_graph(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range);
+#endif // _di_f_parse_dynamic_seek_line_until_graph_
+
+/**
+ * Increment buffer location until a non-graph character (including UTF-8) or an EOL is matched.
+ *
+ * @param buffer
+ *   The string to traverse.
+ * @param placeholder
+ *   A single-width character representing a placeholder to ignore (may be NULL).
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_stop on success, but stopped at end of range.
+ *   F_data_not on success, but there was no string data to seek.
+ *   F_data_not_stop on success, but the range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_memory_not (with error bit) on out of memory.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_is_graph().
+ *
+ * @see f_utf_is_graph()
+ */
+#ifndef _di_f_parse_dynamic_seek_line_until_graph_non_
+  extern f_status_t f_parse_dynamic_seek_line_until_graph_non(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range);
+#endif // _di_f_parse_dynamic_seek_line_until_graph_non_
+
+/**
+ * Seek the buffer location forward until the UTF-8 character (up to 4-byte wide) is reached.
+ *
+ * @param buffer
+ *   The string to traverse.
+ * @param seek_to_this
+ *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_stop on success, but stopped at end of range.
+ *   F_data_not on success, but there was no string data to seek.
+ *   F_data_not_stop on success, but the range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
+ *
+ *   Errors (with error bit) from: f_utf_char_to_character().
+ *
+ * @see f_utf_char_to_character()
+ */
+#ifndef _di_f_parse_dynamic_seek_to_utf_character_
+  extern f_status_t f_parse_dynamic_seek_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range);
+#endif // _di_f_parse_dynamic_seek_to_utf_character_
+
+/**
+ * Identify whether or not the given string represents a single valid FLL Identifier and possibly save the FLL Identifier.
+ *
+ * This will always change the FLL Identifier used and type codes, if a FLL Identifier is provided.
+ *
+ * Whitespace may be before and after the FLL Identifier and will be ignored.
+ * NULLs will be ignored.
+ * Anything else will result in treating the character as a possible FLL Identifier.
+ *
+ * A valid FLL Identifier must terminate on either whitespace, EOL, or the stop point (length).
+ *
+ * The id.name might not be NULL terminated.
+ * An id.name using all 64-bytes will not be NULL terminated.
+ *
+ * If a newline ("\n") is encountered, range->start will be set to 1 byte after the newline.
+ *
+ * @param buffer
+ *   The string to process.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The caller must ensure that the stop point does not exceed the buffer size.
+ *
+ *   The range->start will be updated by this function.
+ *   On error, the range->start may represent the last position looked at.
+ *   On success, the range->start should be after the last valid position (for example for "fss-1234", the ast valid position would be the byte after the "4").
+ *   Be aware that if a UTF-8 character exists at the end of the string but extends beyond the range stop, the stop position may be after the UTF-8 byte and not 1 byte after the stop point.
+ * @param id
+ *   (optional) The FLL Identifier found.
+ *   Set to NULL to not use.
+ *
+ * @return
+ *   F_data_not if length is 0.
+ *   F_found if the buffer does represent a valid FLL Identifier.
+ *   F_found_not if the buffer does not represent a valid FLL Identifier.
+ *
+ *   F_complete_not_utf (with error bit) if a character is an incomplete UTF-8 fragment.
+ *   F_maybe (with error bit) if a character could be a whitespace but width is not long enough. (This is only returned for an otherwise valid FLL Identifier.)
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *   F_parameter (with error bit) from: f_utf_is_word().
+ *
+ * @see isxdigit()
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ * @see f_utf_is_word()
+ */
+#ifndef _di_f_parse_dynamic_partial_fll_identify_
+  extern f_status_t f_parse_dynamic_partial_fll_identify(const f_string_static_t buffer, f_string_range_t * const range, f_fll_id_t * const id);
+#endif // _di_f_parse_dynamic_partial_fll_identify_
+
+/**
+ * Seek the string location forward until the character (up to 4-byte wide) or EOL is reached.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param seek_to
+ *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
+ *
+ *   Errors (with error bit) from: f_utf_char_to_character().
+ *
+ * @see f_utf_char_to_character()
+ */
+#ifndef _di_f_parse_seek_line_to_utf_character_
+  extern f_status_t f_parse_seek_line_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range);
+#endif // _di_f_parse_seek_line_to_utf_character_
+
+/**
+ * Increment string location until a graph character (including UTF-8) or an EOL is matched.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param placeholder
+ *   A single-width character representing a placeholder to ignore (may be NULL).
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_memory_not (with error bit) on out of memory.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_is_graph().
+ *
+ * @see f_utf_is_graph()
+ */
+#ifndef _di_f_parse_seek_line_until_graph_
+  extern f_status_t f_parse_seek_line_until_graph(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range);
+#endif // _di_f_parse_seek_line_until_graph_
+
+/**
+ * Increment string location until a non-graph character (including UTF-8) or an EOL is matched.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param placeholder
+ *   A single-width character representing a placeholder to ignore (may be NULL).
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_stop on success, but stopped stop location.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_memory_not (with error bit) on out of memory.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_parse_seek_line_until_graph_non_
+  extern f_status_t f_parse_seek_line_until_graph_non(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range);
+#endif // _di_f_parse_seek_line_until_graph_non_
+
+/**
+ * Seek the string location forward until the UTF-8 character (up to 4-byte wide) is reached.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param seek_to
+ *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_stop on success, but stopped stop location.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+ *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
+ *
+ *   Errors (with error bit) from: f_utf_char_to_character().
+ *
+ * @see f_utf_char_to_character()
+ */
+#ifndef _di_f_parse_seek_to_utf_character_
+  extern f_status_t f_parse_seek_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range);
+#endif // _di_f_parse_seek_to_utf_character_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_parse_h
diff --git a/level_0/f_parse/c/parse/utf.c b/level_0/f_parse/c/parse/utf.c
new file mode 100644 (file)
index 0000000..f28b8dd
--- /dev/null
@@ -0,0 +1,317 @@
+#include "../parse.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_parse_utf_dynamic_seek_line_to_char_
+  f_status_t f_parse_utf_dynamic_seek_line_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_utf_char_t seek_to_character = seek_to_this << 24;
+
+    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (buffer.string[range->start] != seek_to_character) {
+
+      if (buffer.string[range->start++] == f_utf_char_eol_s) {
+        return F_none_eol;
+      }
+
+      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (range->start >= buffer.used) {
+        return F_none_eos;
+      }
+
+      if (range->start > range->stop) {
+        return F_none_stop;
+      }
+    } // while
+
+    return F_none;
+  }
+#endif // _di_f_parse_utf_dynamic_seek_line_to_char_
+
+#ifndef _di_f_parse_utf_dynamic_seek_line_until_graph_
+  f_status_t f_parse_utf_dynamic_seek_line_until_graph(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_status_t status = F_none;
+
+    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (buffer.string[range->start] == placeholder || (status = f_utf_character_is_graph(buffer.string[range->start])) == F_false) {
+
+      if (F_status_is_error(status)) {
+        return status;
+      }
+
+      if (buffer.string[range->start++] == f_utf_char_eol_s) {
+        return F_none_eol;
+      }
+
+      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (range->start >= buffer.used) {
+        return F_none_eos;
+      }
+
+      if (range->start > range->stop) {
+        return F_none_stop;
+      }
+    } // while
+
+    if (F_status_is_error(status)) {
+      return status;
+    }
+
+    return F_none;
+  }
+#endif // _di_f_parse_utf_dynamic_seek_line_until_graph_
+
+#ifndef _di_f_parse_utf_dynamic_seek_line_until_graph_non_
+  f_status_t f_parse_utf_dynamic_seek_line_until_graph_non(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_status_t status = F_none;
+
+    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (buffer.string[range->start] == placeholder || (status = f_utf_character_is_whitespace(buffer.string[range->start], F_false)) == F_false) {
+
+      if (F_status_is_error(status)) return status;
+      if (buffer.string[range->start] == f_utf_char_eol_s) return F_none_eol;
+
+      ++range->start;
+
+      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (range->start >= buffer.used) return F_none_eos;
+      if (range->start > range->stop) return F_none_stop;
+    } // while
+
+    if (F_status_is_error(status)) return status;
+
+    return F_none;
+  }
+#endif // _di_f_parse_utf_dynamic_seek_line_until_graph_non_
+
+#ifndef _di_f_parse_utf_dynamic_seek_to_char_
+  f_status_t f_parse_utf_dynamic_seek_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!buffer.used) return F_data_not;
+    if (range->start > range->stop) return F_data_not_stop;
+
+    f_utf_char_t seek_to_character = seek_to_this << 24;
+
+    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (buffer.string[range->start] != seek_to_character) {
+
+      ++range->start;
+
+      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (range->start >= buffer.used) {
+        return F_none_eos;
+      }
+
+      if (range->start > range->stop) {
+        return F_none_stop;
+      }
+    } // while
+
+    return F_none;
+  }
+#endif // _di_f_parse_utf_dynamic_seek_to_char_
+
+#ifndef _di_f_parse_utf_seek_line_to_char_
+  f_status_t f_parse_utf_seek_line_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (range->start > range->stop) {
+      return F_data_not_stop;
+    }
+
+    f_utf_char_t seek_to_character = seek_to_this << 24;
+
+    for (; range->start <= range->stop; ++range->start) {
+
+      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (string[range->start] == f_utf_char_eol_s) {
+        return F_none_eol;
+      }
+
+      if (string[range->start] == seek_to_character) {
+        return F_none;
+      }
+    } // for
+
+    return F_none_stop;
+  }
+#endif // _di_f_parse_utf_seek_line_to_char_
+
+#ifndef _di_f_parse_utf_seek_line_until_graph_
+  f_status_t f_parse_utf_seek_line_until_graph(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (range->start > range->stop) {
+      return F_data_not_stop;
+    }
+
+    f_status_t status = F_none;
+
+    if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (string[range->start] == placeholder || (status = f_utf_character_is_graph(string[range->start])) == F_false) {
+
+      if (F_status_is_error(status)) {
+        return status;
+      }
+
+      if (string[range->start++] == f_utf_char_eol_s) {
+        return F_none_eol;
+      }
+
+      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (range->start > range->stop) {
+        return F_none_stop;
+      }
+    } // while
+
+    if (F_status_is_error(status)) {
+      return status;
+    }
+
+    return F_none;
+  }
+#endif // _di_f_parse_utf_seek_line_until_graph_
+
+#ifndef _di_f_parse_utf_seek_line_until_graph_non_
+  f_status_t f_parse_utf_seek_line_until_graph_non(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (range->start > range->stop) {
+      return F_data_not_stop;
+    }
+
+    f_status_t status = F_none;
+
+    if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (string[range->start] == placeholder || (status = f_utf_character_is_graph(string[range->start])) == F_true) {
+
+      if (F_status_is_error(status)) {
+        return status;
+      }
+
+      if (string[range->start++] == f_utf_char_eol_s) {
+        return F_none_eol;
+      }
+
+      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+
+      if (range->start > range->stop) {
+        return F_none_stop;
+      }
+    } // while
+
+    if (F_status_is_error(status)) {
+      return status;
+    }
+
+    return F_none;
+  }
+#endif // _di_f_parse_utf_seek_line_until_graph_non_
+
+#ifndef _di_f_parse_utf_seek_to_char_
+  f_status_t f_parse_utf_seek_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!range) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (range->start > range->stop) {
+      return F_data_not_stop;
+    }
+
+    const f_utf_char_t seek_to_character = seek_to_this << 24;
+
+    if (macro_f_utf_char_t_width_is(string[0]) == 1) {
+      return F_status_set_error(F_utf_fragment);
+    }
+
+    while (range->start <= range->stop) {
+
+      if (string[range->start++] == seek_to_character) {
+        return F_none;
+      }
+
+      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
+        return F_status_set_error(F_utf_fragment);
+      }
+    } // while
+
+    return F_none_stop;
+  }
+#endif // _di_fl_utf_string_seek_to_utf_character_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_parse/c/parse/utf.h b/level_0/f_parse/c/parse/utf.h
new file mode 100644 (file)
index 0000000..c8b7840
--- /dev/null
@@ -0,0 +1,231 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Parse
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides basic UTF-8 string parse capabilities.
+ */
+#ifndef _F_parse_utf_h
+#define _F_parse_utf_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Seek the buffer location forward until the  (1-byte wide) character or EOL is reached.
+ *
+ * @param buffer
+ *   The buffer to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ * @param seek_to_this
+ *   A single-width character.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_eos on success, but stopped at end of buffer.
+ *   F_data_not if buffer length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ */
+#ifndef _di_f_parse_utf_dynamic_seek_line_to_char_
+  extern f_status_t f_parse_utf_dynamic_seek_line_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this);
+#endif // _di_f_parse_utf_dynamic_seek_line_to_char_
+
+/**
+ * Increment buffer location until a graph character or an EOL is matched.
+ *
+ * @param buffer
+ *   The buffer to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ * @param placeholder
+ *   A UTF-8 character representing a placeholder to ignore (may be NULL).
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_eos on success, but stopped at end of buffer.
+ *   F_data_not if buffer length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_graph().
+ *
+ * @see f_utf_character_is_graph()
+ */
+#ifndef _di_f_parse_utf_dynamic_seek_line_until_graph_
+  extern f_status_t f_parse_utf_dynamic_seek_line_until_graph(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder);
+#endif // _di_f_parse_utf_dynamic_seek_line_until_graph_
+
+/**
+ * Increment buffer location until a non-graph character or an EOL is matched.
+ *
+ * @param buffer
+ *   The buffer to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ * @param placeholder
+ *   A single-width character representing a placeholder to ignore (may be NULL).
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_eos on success, but stopped at end of buffer.
+ *   F_none_stop on success, but stopped stop location.
+ *   F_data_not if buffer length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_graph().
+ *
+ * @see f_utf_character_is_graph()
+ */
+#ifndef _di_f_parse_utf_dynamic_seek_line_until_graph_non_
+  extern f_status_t f_parse_utf_dynamic_seek_line_until_graph_non(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder);
+#endif // _di_f_parse_utf_dynamic_seek_line_until_graph_non_
+
+/**
+ * Seek the buffer location forward until the UTF-8 character (1-byte wide) is reached.
+ *
+ * @param buffer
+ *   The buffer to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ * @param seek_to_this
+ *   A single-width non-UTF-8 character.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eos on success, but stopped at end of buffer.
+ *   F_none_stop on success, but stopped stop location.
+ *   F_data_not if buffer length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ */
+#ifndef _di_f_parse_utf_dynamic_seek_to_char_
+  extern f_status_t f_parse_utf_dynamic_seek_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this);
+#endif // _di_f_parse_utf_dynamic_seek_to_char_
+
+/**
+ * Seek the string location forward until the 1-byte wide character or EOL is reached.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ * @param seek_to_this
+ *   A single-width character.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_eos on success, but stopped at end of buffer.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ */
+#ifndef _di_f_parse_utf_seek_line_to_char_
+  extern f_status_t f_parse_utf_seek_line_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this);
+#endif // _di_f_parse_utf_seek_line_to_char_
+
+/**
+ * Increment string location until a UTF-8 graph character or an EOL is matched.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ * @param placeholder
+ *   A UTF-8 character representing a placeholder to ignore (may be NULL).
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_graph().
+ *
+ * @see f_utf_character_is_graph()
+ */
+#ifndef _di_f_parse_utf_seek_line_until_graph_
+  extern f_status_t f_parse_utf_seek_line_until_graph(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder);
+#endif // _di_f_parse_utf_seek_line_until_graph_
+
+/**
+ * Increment string location until a non-graph UTF-8 character or an EOL is matched.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ * @param placeholder
+ *   A UTF-8 character representing a placeholder to ignore (may be NULL).
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eol on success, but stopped at EOL.
+ *   F_none_stop on success, but stopped stop location.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_graph().
+ *
+ * @see f_utf_character_is_graph()
+ */
+#ifndef _di_f_parse_utf_seek_line_until_graph_non_
+  extern f_status_t f_parse_utf_seek_line_until_graph_non(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder);
+#endif // _di_f_parse_utf_seek_line_until_graph_non_
+
+/**
+ * Seek the string location forward until the UTF-8 character (up to 4-byte wide) is reached.
+ *
+ * @param string
+ *   The string to traverse.
+ * @param range
+ *   A range within the buffer representing the start and stop locations.
+ *   The start location will be incremented by seek.
+ * @param seek_to_this
+ *   A single-width non-UTF-8 character.
+ *
+ * @return
+ *   F_none on success.
+ *   F_none_eos on success, but stopped at end of buffer.
+ *   F_none_stop on success, but stopped stop location.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ */
+#ifndef _di_f_parse_utf_seek_to_character_
+  extern f_status_t f_parse_utf_seek_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this);
+#endif // _di_fl_utf_string__seek_to_character_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_parse_utf_h
diff --git a/level_0/f_parse/data/build/defines b/level_0/f_parse/data/build/defines
new file mode 100644 (file)
index 0000000..4f13080
--- /dev/null
@@ -0,0 +1 @@
+# fss-0000
diff --git a/level_0/f_parse/data/build/dependencies b/level_0/f_parse/data/build/dependencies
new file mode 100644 (file)
index 0000000..deb9037
--- /dev/null
@@ -0,0 +1,7 @@
+# fss-0000
+
+f_type
+f_status
+f_memory
+f_string
+f_utf
diff --git a/level_0/f_parse/data/build/dependencies-tests b/level_0/f_parse/data/build/dependencies-tests
new file mode 100644 (file)
index 0000000..dea3179
--- /dev/null
@@ -0,0 +1,3 @@
+# fss-0001
+
+cmocka 1.*
diff --git a/level_0/f_parse/data/build/fakefile b/level_0/f_parse/data/build/fakefile
new file mode 100644 (file)
index 0000000..5328059
--- /dev/null
@@ -0,0 +1,11 @@
+# fss-0005 iki-0002
+
+settings:
+  fail exit
+  modes individual level monolithic clang test
+
+  environment PATH LD_LIBRARY_PATH
+
+main:
+
+  build
similarity index 89%
rename from level_1/fl_string/data/build/settings
rename to level_0/f_parse/data/build/settings
index 75fc00071af375f76c8162b7a40b833e6bfaa36c..2709b82cda01bff2fdaa8eaa3c9ecef46a2ceef0 100644 (file)
@@ -1,6 +1,6 @@
 # fss-0001
 
-build_name fl_string
+build_name f_parse
 
 version_major 0
 version_minor 7
@@ -20,15 +20,15 @@ build_language c
 build_libraries -lc
 build_libraries-individual -lf_memory -lf_string -lf_utf
 
-build_sources_library string.c private-string.c
+build_sources_library parse.c parse/utf.c
 
-build_sources_headers string.h
+build_sources_headers parse.h parse/utf.h
 
 build_script yes
 build_shared yes
 build_static no
 
-path_headers fll/level_1
+path_headers fll/level_0
 path_library_script script
 path_library_shared shared
 path_library_static static
diff --git a/level_0/f_rip/c/private-rip.c b/level_0/f_rip/c/private-rip.c
new file mode 100644 (file)
index 0000000..b3c0e1f
--- /dev/null
@@ -0,0 +1,119 @@
+#include "rip.h"
+#include "private-rip.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(_di_f_rip_dynamic_partial_) || !defined(_di_f_rip_dynamic_partial_nulless_) || !defined(_di_f_rip_dynamic_)  || !defined(_di_f_rip_) || !defined(_di_f_rip_nulless_)
+  f_status_t private_f_rip_find_range(const f_string_t string, f_array_length_t * const start, f_array_length_t * const stop) {
+
+    const f_array_length_t stop_original = *stop;
+    f_array_length_t previous = 0;
+    f_status_t status = F_none;
+
+    // Skip past leading whitespace.
+    for (; *start <= *stop; *start += macro_f_utf_byte_width(string[*start])) {
+
+      // Skip past NULL.
+      while (*start < *stop && !string[*start]) ++(*start);
+      if (*start > *stop) break;
+
+      status = f_utf_is_whitespace(string + *start, (*stop - *start) + 1, F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_parameter) return status;
+
+        break;
+      }
+
+      if (status == F_false) break;
+
+      status = f_utf_is_combining(string + *start, (*stop - *start) + 1);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_parameter) return status;
+
+        break;
+      }
+
+      // This is a combining character, so the previous character is no longer considered a space.
+      if (status == F_true) {
+        *start = previous;
+
+        break;
+      }
+
+      previous = *start;
+    } // for
+
+    // Use previous as boolean here to designate that a combining is found in a previous character.
+    for (previous = F_false; *stop > *start; --(*stop)) {
+
+      // Skip past NULL.
+      while (*stop > *start && !string[*stop]) --(*stop);
+
+      if (!string[*stop]) continue;
+      if (*stop == *start) break;
+
+      // Go left until either width is 0 (ASCII, or > 1) to determine the character.
+      for (;;) {
+
+        if (macro_f_utf_byte_width_is(string[*stop]) == 1) {
+          --(*stop);
+
+          if (*stop == *start) break;
+        }
+        else {
+          break;
+        }
+      } // for
+
+      if (*stop == *start) break;
+
+      status = f_utf_is_whitespace(string + *stop, (stop_original - *stop) + 1, F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_parameter) return status;
+
+        break;
+      }
+
+      if (status == F_false) break;
+      if (status == F_true && previous == F_true) break;
+
+      previous = F_false;
+
+      status = f_utf_is_combining(string + *stop, (stop_original - *stop) + 1);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_parameter) return status;
+
+        break;
+      }
+
+      // This is a combining character, so the next character is no longer considered a space.
+      if (status == F_true) {
+        previous = F_true;
+      }
+    } // for
+
+    if (*stop == *start) {
+      status = f_utf_is_whitespace(string + *stop, (stop_original - *stop) + 1, F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_parameter) return status;
+      }
+
+      if (status == F_true) {
+        return F_data_not;
+      }
+    }
+
+    return F_none;
+  }
+#endif // !defined(_di_f_rip_dynamic_partial_) || !defined(_di_f_rip_dynamic_partial_nulless_) || !defined(_di_f_rip_dynamic_)  || !defined(_di_f_rip_) || !defined(_di_f_rip_nulless_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_rip/c/private-rip.h b/level_0/f_rip/c/private-rip.h
new file mode 100644 (file)
index 0000000..e19d3cb
--- /dev/null
@@ -0,0 +1,58 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Rip
+ * 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_F_rip_h
+#define _PRIVATE_F_rip_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Private implementation of f_rip(), but only the part for finding the start/stop range.
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param string
+ *   The string to rip from.
+ * @param start
+ *   Inclusive start point of string to rip.
+ *   Will be updated to reflect the new start range.
+ * @param stop
+ *   Inclusive stop point of string to rip.
+ *   Will be updated to reflect the new stop range.
+ *
+ * @return
+ *   F_none on success.
+ *   F_data_not on success but only white space found.
+ *
+ *   F_utf_not (with error bit) if a character is not valid UTF-8.
+ *
+ *   F_parameter (with error bit) from: f_utf_is_combining().
+ *   F_parameter (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ *
+ * @see f_rip_dynamic_partial()
+ * @see f_rip_dynamic_partial_nulless()
+ * @see f_rip_dynamic()
+ * @see f_rip()
+ * @see f_rip_nulless()
+ */
+#if !defined(_di_f_rip_dynamic_partial_) || !defined(_di_f_rip_dynamic_partial_nulless_) || !defined(_di_f_rip_dynamic_)  || !defined(_di_f_rip_) || !defined(_di_f_rip_nulless_)
+  extern f_status_t private_f_rip_find_range(const f_string_t string, f_array_length_t * const start, f_array_length_t * const stop) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_rip_dynamic_partial_) || !defined(_di_f_rip_dynamic_partial_nulless_) || !defined(_di_f_rip_dynamic_)  || !defined(_di_f_rip_) || !defined(_di_f_rip_nulless_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _PRIVATE_F_rip_h
diff --git a/level_0/f_rip/c/rip.c b/level_0/f_rip/c/rip.c
new file mode 100644 (file)
index 0000000..6ea24cb
--- /dev/null
@@ -0,0 +1,146 @@
+#include "rip.h"
+#include "private-rip.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_rip_
+  f_status_t f_rip(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!length) return F_data_not_eos;
+
+    f_array_length_t begin = 0;
+    f_array_length_t end = length - 1;
+
+    {
+      const f_status_t status = private_f_rip_find_range(source, &begin, &end);
+      if (F_status_is_error(status)) return status;
+      if (status == F_data_not) return status;
+    }
+
+    return f_string_append(source + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_
+
+#ifndef _di_f_rip_dynamic_
+  f_status_t f_rip_dynamic(const f_string_static_t source, f_string_dynamic_t * const destination) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!source.used) return F_data_not_eos;
+
+    f_array_length_t begin = 0;
+    f_array_length_t end = source.used - 1;
+
+    {
+      const f_status_t status = private_f_rip_find_range(source.string, &begin, &end);
+      if (F_status_is_error(status)) return status;
+      if (status == F_data_not) return status;
+    }
+
+    if (begin > end) return F_data_not_stop;
+
+    return f_string_append(source.string + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_dynamic_
+
+#ifndef _di_f_rip_dynamic_nulless_
+  f_status_t f_rip_dynamic_nulless(const f_string_static_t source, f_string_dynamic_t * const destination) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!source.used) return F_data_not_eos;
+
+    f_array_length_t begin = 0;
+    f_array_length_t end = source.used - 1;
+
+    {
+      const f_status_t status = private_f_rip_find_range(source.string, &begin, &end);
+      if (F_status_is_error(status)) return status;
+      if (status == F_data_not) return status;
+    }
+
+    if (begin > end) return F_data_not_stop;
+
+    return f_string_append_nulless(source.string + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_dynamic_nulless_
+
+#ifndef _di_f_rip_nulless_
+  f_status_t f_rip_nulless(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!length) return F_data_not_eos;
+
+    f_array_length_t begin = 0;
+    f_array_length_t end = length - 1;
+
+    {
+      const f_status_t status = private_f_rip_find_range(source, &begin, &end);
+      if (F_status_is_error(status)) return status;
+      if (status == F_data_not) return status;
+    }
+
+    return f_string_append_nulless(source + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_nulless_
+
+#ifndef _di_f_rip_dynamic_partial_
+  f_status_t f_rip_dynamic_partial(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!source.used) return F_data_not_eos;
+    if (range.start > range.stop) return F_data_not_stop;
+
+    f_array_length_t begin = range.start;
+    f_array_length_t end = range.stop;
+
+    {
+      const f_status_t status = private_f_rip_find_range(source.string, &begin, &end);
+      if (F_status_is_error(status)) return status;
+      if (status == F_data_not) return status;
+    }
+
+    if (begin > end) return F_data_not_stop;
+
+    return f_string_append(source.string + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_dynamic_partial_
+
+#ifndef _di_f_rip_dynamic_partial_nulless_
+  f_status_t f_rip_dynamic_partial_nulless(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination) {
+    #ifndef _di_level_0_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_0_parameter_checking_
+
+    if (!source.used) return F_data_not_eos;
+    if (range.start > range.stop) return F_data_not_stop;
+
+    f_array_length_t begin = range.start;
+    f_array_length_t end = range.stop;
+
+    {
+      const f_status_t status = private_f_rip_find_range(source.string, &begin, &end);
+      if (F_status_is_error(status)) return status;
+      if (status == F_data_not) return status;
+    }
+
+    if (begin > end) return F_data_not_stop;
+
+    return f_string_append_nulless(source.string + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_dynamic_partial_nulless_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_rip/c/rip.h b/level_0/f_rip/c/rip.h
new file mode 100644 (file)
index 0000000..8a88e27
--- /dev/null
@@ -0,0 +1,241 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Rip
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides basic string rip capabilities.
+ */
+#ifndef _F_rip_h
+#define _F_rip_h
+
+// Libc includes.
+#include <string.h>
+
+// FLL-0 includes.
+#include <fll/level_0/status.h>
+#include <fll/level_0/memory.h>
+#include <fll/level_0/type.h>
+#include <fll/level_0/utf.h>
+
+// FLL-0 compare includes.
+#include <fll/level_0/rip/utf.h>
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Allocate a new string from the provided range in the string.
+ *
+ * Ignores leading and trailing whitespace.
+ * Ignores leading and trailing NULL characters.
+ * As a result, resulting size may be smaller than requested length.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param length
+ *   The length of source to append.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_data_not if the range to rip is empty.
+ *   F_data_not_eos if source length is 0.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Success from: f_string_append_nulless().
+ *
+ *   Errors (with error bit) from: f_string_append().
+ *   Errors (with error bit) from: f_utf_is_combining().
+ *   Errors (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_string_append()
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_rip_
+  extern f_status_t f_rip(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination);
+#endif // _di_f_rip_
+
+/**
+ * Allocate a new string from the provided range in the buffer.
+ *
+ * Ignores leading and trailing whitespace.
+ * Ignores leading and trailing NULL characters.
+ * As a result, resulting size may be smaller than requested range.
+ *
+ * @param source
+ *   The buffer to rip from.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_data_not if the range to rip is empty.
+ *   F_data_not_eos if source length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Success from: f_string_append().
+ *
+ *   Errors (with error bit) from: f_string_append().
+ *   Errors (with error bit) from: f_utf_is_combining().
+ *   Errors (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_string_append()
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_rip_dynamic_
+  extern f_status_t f_rip_dynamic(const f_string_static_t source, f_string_dynamic_t * const destination);
+#endif // _di_f_rip_dynamic_
+
+/**
+ * Allocate a new string from the provided range in the buffer.
+ *
+ * Ignores leading and trailing whitespace.
+ * Ignores leading and trailing NULL characters.
+ * As a result, resulting size may be smaller than requested range.
+ *
+ * Skips over NULL characters from source when appending.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_data_not if the range to rip is empty.
+ *   F_data_not_eos if source length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Success from: f_string_append_nulless().
+ *
+ *   Errors (with error bit) from: f_string_append_nulless().
+ *   Errors (with error bit) from: f_utf_is_combining().
+ *   Errors (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_string_append_nulless()
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_rip_dynamic_nulless_
+  extern f_status_t f_rip_dynamic_nulless(const f_string_static_t source, f_string_dynamic_t * const destination);
+#endif // _di_f_rip_dynamic_nulless_
+
+/**
+ * Allocate a new string from the provided range in the string.
+ *
+ * Ignores leading and trailing whitespace.
+ * Ignores leading and trailing NULL characters.
+ * As a result, resulting size may be smaller than requested length.
+ *
+ * Skips over NULL characters from source when ripping.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param length
+ *   The length of source to append.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_data_not if the range to rip is empty.
+ *   F_data_not_eos if source length is 0.
+ *
+ *   Success from: f_string_append_nulless().
+ *
+ *   Errors (with error bit) from: f_string_append_nulless().
+ *   Errors (with error bit) from: f_utf_is_combining().
+ *   Errors (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_string_append_nulless()
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_rip_nulless_
+  extern f_status_t f_rip_nulless(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination);
+#endif // _di_f_rip_nulless_
+
+/**
+ * Allocate a new string from the provided range in the buffer.
+ *
+ * Ignores leading and trailing whitespace.
+ * Ignores leading and trailing NULL characters.
+ * As a result, resulting size may be smaller than requested range.
+ *
+ * @param source
+ *   The buffer to rip from.
+ * @param range
+ *   A range within the buffer representing the string to rip.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_data_not if the range to rip is empty.
+ *   F_data_not_eos if source length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Success from: f_string_append().
+ *
+ *   Errors (with error bit) from: f_string_append().
+ *   Errors (with error bit) from: f_utf_is_combining().
+ *   Errors (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_string_append()
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_rip_dynamic_partial_
+  extern f_status_t f_rip_dynamic_partial(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination);
+#endif // _di_f_rip_dynamic_partial_
+
+/**
+ * Allocate a new string from the provided range in the buffer.
+ *
+ * Ignores leading and trailing whitespace.
+ * Ignores leading and trailing NULL characters.
+ * As a result, resulting size may be smaller than requested range.
+ *
+ * Skips over NULL characters from source when appending.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param range
+ *   A range within the buffer representing the string to rip.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_data_not if the range to rip is empty.
+ *   F_data_not_eos if source length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Success from: f_string_append_nulless().
+ *
+ *   Errors (with error bit) from: f_string_append_nulless().
+ *   Errors (with error bit) from: f_utf_is_combining().
+ *   Errors (with error bit) from: f_utf_is_whitespace().
+ *
+ * @see f_string_append_nulless()
+ * @see f_utf_is_combining()
+ * @see f_utf_is_whitespace()
+ */
+#ifndef _di_f_rip_dynamic_partial_nulless_
+  extern f_status_t f_rip_dynamic_partial_nulless(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination);
+#endif // _di_f_rip_dynamic_partial_nulless_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_rip_h
diff --git a/level_0/f_rip/c/rip/private-utf.c b/level_0/f_rip/c/rip/private-utf.c
new file mode 100644 (file)
index 0000000..8826b8f
--- /dev/null
@@ -0,0 +1,76 @@
+#include "../rip.h"
+#include "private-utf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#if !defined(_di_f_rip_utf_) || !defined(_di_f_rip_utf_dynamic_) || !defined(_di_f_rip_utf_nulless_) || !defined(_di_f_rip_utf_dynamic_nulless_)
+  f_status_t private_f_rip_utf_find_range(const f_utf_string_t source, f_array_length_t *start, f_array_length_t *stop) {
+
+    f_status_t status = F_none;
+
+    // Skip past leading whitespace.
+    for (; *start <= *stop; ++(*start)) {
+
+      // Skip past NULL.
+      while (*start < *stop && !source[*start]) ++(*start);
+      if (*start > *stop) break;
+
+      status = f_utf_character_is_whitespace(source[*start], F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_maybe) {
+          return F_status_set_error(F_utf_not);
+        }
+
+        return status;
+      }
+
+      if (status == F_false) break;
+    } // for
+
+    for (; *stop > *start; --(*stop)) {
+
+      // Skip past NULL.
+      while (*stop > *start && !source[*stop]) --(*stop);
+
+      if (!source[*stop]) continue;
+      if (*stop == *start) break;
+
+      status = f_utf_character_is_whitespace(source[*stop], F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_maybe) {
+          return F_status_set_error(F_utf_not);
+        }
+
+        return status;
+      }
+
+      if (status == F_false) break;
+    } // for
+
+    if (*stop == *start) {
+      status = f_utf_character_is_whitespace(source[*stop], F_false);
+
+      if (F_status_is_error(status)) {
+        if (F_status_set_fine(status) == F_maybe) {
+          return F_status_set_error(F_utf_not);
+        }
+
+        return status;
+      }
+
+      if (status == F_true) {
+        return F_data_not;
+      }
+    }
+
+    return F_none;
+  }
+#endif // !defined(_di_f_rip_utf_) || !defined(_di_f_rip_utf_dynamic_) || !defined(_di_f_rip_utf_nulless_) || !defined(_di_f_rip_utf_dynamic_nulless_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_rip/c/rip/private-utf.h b/level_0/f_rip/c/rip/private-utf.h
new file mode 100644 (file)
index 0000000..96b5b01
--- /dev/null
@@ -0,0 +1,52 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Rip
+ * 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_F_rip_utf_h
+#define _PRIVATE_F_rip_utf_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Private implementation of f_rip_utf(), but only the part for finding the start/stop range.
+ *
+ * Intended to be shared to each of the different implementation variations.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param start
+ *   Inclusive start point of string to rip.
+ *   Will be updated to reflect the new start range.
+ * @param stop
+ *   Inclusive stop point of string to rip.
+ *   Will be updated to reflect the new stop range.
+ *
+ * @return
+ *   F_none on success.
+ *   F_data_not on success but only white space found.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace()
+ *
+ * @see f_utf_character_is_whitespace()
+ * @see f_rip_utf_dynamic()
+ * @see f_rip_utf()
+ */
+#if !defined(_di_f_rip_utf_) || !defined(_di_f_rip_utf_dynamic_) || !defined(_di_f_rip_utf_nulless_) || !defined(_di_f_rip_utf_dynamic_nulless_)
+  extern f_status_t private_f_rip_utf_find_range(const f_utf_string_t source, f_array_length_t *start, f_array_length_t *stop) F_attribute_visibility_internal_d;
+#endif // !defined(_di_f_rip_utf_) || !defined(_di_f_rip_utf_dynamic_) || !defined(_di_f_rip_utf_nulless_) || !defined(_di_f_rip_utf_dynamic_nulless_)
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _PRIVATE_F_rip_utf_h
diff --git a/level_0/f_rip/c/rip/utf.c b/level_0/f_rip/c/rip/utf.c
new file mode 100644 (file)
index 0000000..1c39fe8
--- /dev/null
@@ -0,0 +1,90 @@
+#include "../rip.h"
+#include "private-utf.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#ifndef _di_f_rip_utf_
+  f_status_t f_rip_utf(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!length) return F_data_not;
+
+    f_array_length_t begin = 0;
+    f_array_length_t end = length - 1;
+
+    f_status_t status = private_f_rip_utf_find_range(source, &begin, &end);
+
+    if (F_status_is_error(status)) {
+      return status;
+    }
+
+    if (status == F_data_not) {
+      return status;
+    }
+
+    return f_utf_string_append(source + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_utf_
+
+#ifndef _di_f_rip_utf_dynamic_
+  f_status_t f_rip_utf_dynamic(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination) {
+    #ifndef _di_level_1_parameter_checking_
+      if (source.used <= range.start) return F_status_set_error(F_parameter);
+      if (source.used <= range.stop) return F_status_set_error(F_parameter);
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!source.used) return F_data_not;
+    if (range.start > range.stop) return F_data_not_stop;
+
+    return f_utf_string_append(source.string + range.start, (range.stop - range.start) + 1, destination);
+  }
+#endif // _di_f_rip_utf_dynamic_
+
+#ifndef _di_f_rip_utf_dynamic_nulless_
+  f_status_t f_rip_utf_dynamic_nulless(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination) {
+    #ifndef _di_level_1_parameter_checking_
+      if (source.used <= range.start) return F_status_set_error(F_parameter);
+      if (source.used <= range.stop) return F_status_set_error(F_parameter);
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!source.used) return F_data_not;
+    if (range.start > range.stop) return F_data_not_stop;
+
+    return f_utf_string_append_nulless(source.string + range.start, (range.stop - range.start) + 1, destination);
+  }
+#endif // _di_f_rip_utf_dynamic_nulless_
+
+#ifndef _di_f_rip_utf_nulless_
+  f_status_t f_rip_utf_nulless(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination) {
+    #ifndef _di_level_1_parameter_checking_
+      if (!destination) return F_status_set_error(F_parameter);
+    #endif // _di_level_1_parameter_checking_
+
+    if (!length) return F_data_not;
+
+    f_array_length_t begin = 0;
+    f_array_length_t end = length - 1;
+
+    f_status_t status = private_f_rip_utf_find_range(source, &begin, &end);
+
+    if (F_status_is_error(status)) {
+      return status;
+    }
+
+    if (status == F_data_not) {
+      return status;
+    }
+
+    return f_utf_string_append_nulless(source + begin, (end - begin) + 1, destination);
+  }
+#endif // _di_f_rip_utf_nulless_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
diff --git a/level_0/f_rip/c/rip/utf.h b/level_0/f_rip/c/rip/utf.h
new file mode 100644 (file)
index 0000000..cbe2fc7
--- /dev/null
@@ -0,0 +1,137 @@
+/**
+ * FLL - Level 0
+ *
+ * Project: Rip
+ * API Version: 0.7
+ * Licenses: lgpl-2.1-or-later
+ *
+ * Provides basic UTF-8 string rip capabilities.
+ */
+#ifndef _F_rip_utf_h
+#define _F_rip_utf_h
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * Allocate a new UTF-8 string from the provided range in the string.
+ *
+ * Ignores leading and trailing whitespace.
+ * As a result, resulting size may be smaller than requested length.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param length
+ *   The length of source to append.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_none on success.
+ *   F_data_not if source length is 0.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace().
+ *
+ * @see f_utf_character_is_whitespace()
+ */
+#ifndef _di_f_rip_utf_
+  extern f_status_t f_rip_utf(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination);
+#endif // _di_f_rip_utf_
+
+/**
+ * Allocate a new UTF-8 string from the provided range in the buffer.
+ *
+ * Ignores leading and trailing whitespace.
+ * As a result, resulting size may be smaller than requested range.
+ *
+ * @param source
+ *   The buffer to rip from.
+ * @param range
+ *   A range within the buffer representing the string to rip.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_none on success.
+ *   F_data_not if source length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_string_append().
+ *
+ * @see f_utf_string_append()
+ */
+#ifndef _di_f_rip_utf_dynamic_
+  extern f_status_t f_rip_utf_dynamic(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination);
+#endif // _di_f_rip_utf_dynamic_
+
+/**
+ * Allocate a new UTF-8 string from the provided range in the buffer.
+ *
+ * Ignores leading and trailing whitespace.
+ * As a result, resulting size may be smaller than requested range.
+ *
+ * Skips over NULL characters from source when appending.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param range
+ *   A range within the buffer representing the string to rip.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_none on success.
+ *   F_data_not if source length is 0.
+ *   F_data_not_stop if range.start > range.stop.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *
+ *   Errors (with error bit) from: f_utf_string_append_nulless().
+ *
+ * @see f_utf_string_append_nulless()
+ */
+#ifndef _di_f_rip_utf_dynamic_nulless_
+  extern f_status_t f_rip_utf_dynamic_nulless(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination);
+#endif // _di_f_rip_utf_dynamic_nulless_
+
+/**
+ * Allocate a new UTF-8 string from the provided range in the string.
+ *
+ * Ignores leading and trailing whitespace.
+ * As a result, resulting size may be smaller than requested length.
+ *
+ * Skips over NULL characters from source when ripping.
+ *
+ * @param source
+ *   The string to rip from.
+ * @param length
+ *   The length of source to append.
+ * @param destination
+ *   The new string, which will be allocated or reallocated as necessary.
+ *
+ * @return
+ *   F_none on success.
+ *   F_data_not if source length is 0.
+ *
+ *   F_parameter (with error bit) if a parameter is invalid.
+ *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+ *
+ *   Errors (with error bit) from: f_utf_character_is_whitespace().
+ *
+ * @see f_utf_character_is_whitespace()
+ */
+#ifndef _di_f_rip_utf_nulless_
+  extern f_status_t f_rip_utf_nulless(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination);
+#endif // _di_f_rip_utf_nulless_
+
+#ifdef __cplusplus
+} // extern "C"
+#endif
+
+#endif // _F_rip_utf_h
diff --git a/level_0/f_rip/data/build/defines b/level_0/f_rip/data/build/defines
new file mode 100644 (file)
index 0000000..4f13080
--- /dev/null
@@ -0,0 +1 @@
+# fss-0000
diff --git a/level_0/f_rip/data/build/dependencies b/level_0/f_rip/data/build/dependencies
new file mode 100644 (file)
index 0000000..deb9037
--- /dev/null
@@ -0,0 +1,7 @@
+# fss-0000
+
+f_type
+f_status
+f_memory
+f_string
+f_utf
diff --git a/level_0/f_rip/data/build/dependencies-tests b/level_0/f_rip/data/build/dependencies-tests
new file mode 100644 (file)
index 0000000..dea3179
--- /dev/null
@@ -0,0 +1,3 @@
+# fss-0001
+
+cmocka 1.*
diff --git a/level_0/f_rip/data/build/fakefile b/level_0/f_rip/data/build/fakefile
new file mode 100644 (file)
index 0000000..5328059
--- /dev/null
@@ -0,0 +1,11 @@
+# fss-0005 iki-0002
+
+settings:
+  fail exit
+  modes individual level monolithic clang test
+
+  environment PATH LD_LIBRARY_PATH
+
+main:
+
+  build
diff --git a/level_0/f_rip/data/build/settings b/level_0/f_rip/data/build/settings
new file mode 100644 (file)
index 0000000..74c092e
--- /dev/null
@@ -0,0 +1,58 @@
+# fss-0001
+
+build_name f_rip
+
+version_major 0
+version_minor 7
+version_micro 0
+version_file micro
+version_target minor
+
+modes individual clang test coverage
+modes_default individual
+
+build_compiler gcc
+build_compiler-clang clang
+build_indexer ar
+build_indexer_arguments rcs
+build_language c
+
+build_libraries -lc
+build_libraries-individual -lf_memory -lf_string -lf_utf
+
+build_sources_library rip.c rip/utf.c private-rip.c rip/private-utf.c
+
+build_sources_headers rip.h rip/utf.h
+
+build_script yes
+build_shared yes
+build_static no
+
+path_headers fll/level_0
+path_library_script script
+path_library_shared shared
+path_library_static static
+path_object_script script
+path_object_shared shared
+path_object_static static
+path_program_script script
+path_program_shared shared
+path_program_static static
+
+has_path_standard yes
+preserve_path_headers yes
+
+search_exclusive yes
+search_shared yes
+search_static yes
+
+environment PATH LD_LIBRARY_PATH
+
+flags -O2 -z now -g -fdiagnostics-color=always -Wno-logical-not-parentheses -Wno-parentheses
+flags-clang -Wno-logical-op-parentheses
+flags-test -O0 -fstack-protector -Wall
+flags-coverage -O0 --coverage -fprofile-abs-path -fprofile-dir=build/coverage/
+
+flags_library -fPIC
+flags_object -fPIC
+flags_program -fPIE
index 8830fcbac699b706e607db10bf950fe7a26648a8..22ce72d94002358e9c01f7f4f2b8016ae2975d0b 100644 (file)
@@ -47,6 +47,7 @@ extern "C" {
  * @see f_string_dynamic_partial_mash_nulless()
  * @see f_string_dynamic_partial_mish()
  * @see f_string_dynamic_partial_mish_nulless()
+ * @see f_string_dynamic_partial_prepend()
  * @see f_string_dynamics_append()
  * @see f_string_map_multis_append()
  * @see f_string_mash()
index 34a9bb2cade5fa8bf35c57376d280254773db6a3..81e729d725a798e788f7edeacfe5a07187a80a00 100644 (file)
@@ -20,10 +20,30 @@ build_language c
 build_libraries -lc
 build_libraries-individual -lf_memory
 
-build_sources_library string.c private-string.c string/common.c string/private-dynamic.c string/private-dynamics.c string/private-dynamicss.c string/private-maps.c string/private-mapss.c string/private-map_multis.c string/private-map_multiss.c string/private-quantitys.c string/private-quantityss.c string/private-ranges.c string/private-rangess.c string/private-triples.c string/private-tripless.c
-build_sources_library string/dynamic.c string/dynamics.c string/dynamicss.c string/map.c string/maps.c string/mapss.c string/map_multi.c string/map_multis.c string/map_multiss.c string/quantity.c string/quantitys.c string/quantityss.c string/range.c string/ranges.c string/rangess.c string/static.c string/statics.c string/staticss.c string/triple.c string/triples.c string/tripless.c
+build_sources_library string.c
+build_sources_library private-string.c string/common.c
+build_sources_library string/private-dynamic.c string/private-dynamics.c string/private-dynamicss.c
+build_sources_library string/private-maps.c string/private-mapss.c
+build_sources_library string/private-map_multis.c string/private-map_multiss.c
+build_sources_library string/private-quantitys.c string/private-quantityss.c
+build_sources_library string/private-ranges.c string/private-rangess.c
+build_sources_library string/private-triples.c string/private-tripless.c
+build_sources_library string/dynamic.c string/dynamics.c string/dynamicss.c
+build_sources_library string/map.c string/maps.c string/mapss.c
+build_sources_library string/map_multi.c string/map_multis.c string/map_multiss.c
+build_sources_library string/quantity.c string/quantitys.c string/quantityss.c
+build_sources_library string/range.c string/ranges.c string/rangess.c
+build_sources_library string/static.c string/statics.c string/staticss.c
+build_sources_library string/triple.c string/triples.c string/tripless.c
 
-build_sources_headers string.h string/common.h string/dynamic.h string/dynamics.h string/dynamicss.h string/map.h string/maps.h string/mapss.h string/map_multi.h string/map_multis.h string/map_multiss.h string/quantity.h string/quantitys.h string/quantityss.h string/range.h string/ranges.h string/rangess.h string/static.h string/statics.h string/staticss.h string/triple.h string/triples.h string/tripless.h
+build_sources_headers string.h string/common.h
+build_sources_headers string/dynamic.h string/dynamics.h string/dynamicss.h
+build_sources_headers string/map.h string/maps.h string/mapss.h
+build_sources_headers string/map_multi.h string/map_multis.h string/map_multiss.h
+build_sources_headers string/quantity.h string/quantitys.h string/quantityss.h
+build_sources_headers string/range.h string/ranges.h string/rangess.h
+build_sources_headers string/static.h string/statics.h string/staticss.h
+build_sources_headers string/triple.h string/triples.h string/tripless.h
 
 build_script yes
 build_shared yes
diff --git a/level_1/fl_string/c/private-string.h b/level_1/fl_string/c/private-string.h
deleted file mode 100644 (file)
index 8276c94..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-/**
- * FLL - Level 1
- *
- * Project: String
- * 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_FL_string_h
-#define _PRIVATE_FL_string_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Private implementation of fl_string_compare().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param offset1
- *   Offset of string1 to start at.
- * @param offset2
- *   Offset of string2 to start at.
- * @param stop1
- *   Exclusive stop position for string1.
- * @param stop2
- *   Exclusive stop position for string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- * @see fl_string_compare()
- * @see fl_string_dynamic_compare()
- * @see fl_string_dynamic_compare_string()
- * @see fl_string_dynamic_partial_compare()
- * @see fl_string_dynamic_partial_compare_dynamic()
- */
-#if !defined(_di_fl_string_compare_) || !defined(_di_fl_string_dynamic_compare_) || !defined(_di_fl_string_dynamic_compare_string_) || !defined(_di_fl_string_dynamic_partial_compare_) || !defined(_di_fl_string_dynamic_partial_compare_dynamic_)
-  extern f_status_t private_fl_string_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_string_compare_) || !defined(_di_fl_string_dynamic_compare_) || !defined(_di_fl_string_dynamic_compare_string_) || !defined(_di_fl_string_dynamic_partial_compare_) || !defined(_di_fl_string_dynamic_partial_compare_dynamic_)
-
-/**
- * Private implementation of fl_string_compare_except().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param offset1
- *   Offset of string1 to start at.
- * @param offset2
- *   Offset of string2 to start at.
- * @param stop1
- *   Exclusive stop position for string1.
- * @param stop2
- *   Exclusive stop position for string2.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- * @see fl_string_compare_except()
- * @see fl_string_dynamic_compare_except()
- * @see fl_string_dynamic_partial_compare_except()
- */
-#if !defined(_di_fl_string_compare_except_) || !defined(_di_fl_string_dynamic_compare_except_) || !defined(_di_fl_string_dynamic_partial_compare_except_)
-  extern f_status_t private_fl_string_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_string_compare_except_) || !defined(_di_fl_string_dynamic_compare_except_) || !defined(_di_fl_string_dynamic_partial_compare_except_)
-
-/**
- * Private implementation of fl_string_compare_except_trim().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param offset1
- *   Offset of string1 to start at.
- * @param offset2
- *   Offset of string2 to start at.
- * @param stop1
- *   Exclusive stop position for string1.
- * @param stop2
- *   Exclusive stop position for string2.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_utf_not (with error bit) if a character is not valid UTF-8.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- *
- * @see fl_string_compare_except_trim()
- * @see fl_string_dynamic_compare_except_trim()
- * @see fl_string_dynamic_partial_compare_except_trim()
- */
-#if !defined(_di_fl_string_compare_except_trim_) || !defined(_di_fl_string_dynamic_compare_except_trim_) || !defined(_di_fl_string_dynamic_partial_compare_except_trim_)
-  extern f_status_t private_fl_string_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2, const f_array_lengths_t except1, const f_array_lengths_t except2) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_string_compare_except_trim_) || !defined(_di_fl_string_dynamic_compare_except_trim_) || !defined(_di_fl_string_dynamic_partial_compare_except_trim_)
-
-/**
- * Private implementation of fl_string_compare_trim().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param offset1
- *   Offset of string1 to start at.
- * @param offset2
- *   Offset of string2 to start at.
- * @param stop1
- *   Exclusive stop position for string1.
- * @param stop2
- *   Exclusive stop position for string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_utf_not (with error bit) if a character is not valid UTF-8.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- *
- * @see fl_string_compare_trim()
- * @see fl_string_dynamic_compare_trim()
- * @see fl_string_dynamic_partial_compare_trim()
- */
-#if !defined(_di_fl_string_compare_trim_) || !defined(_di_fl_string_dynamic_compare_trim_) || !defined(_di_fl_string_dynamic_partial_compare_trim_)
-  extern f_status_t private_fl_string_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_string_compare_trim_) || !defined(_di_fl_string_dynamic_compare_trim_) || !defined(_di_fl_string_dynamic_partial_compare_trim_)
-
-/**
- * Private implementation of fl_string_rip(), but only the part for finding the start/stop range.
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string
- *   The string to rip from.
- * @param start
- *   Inclusive start point of string to rip.
- *   Will be updated to reflect the new start range.
- * @param stop
- *   Inclusive stop point of string to rip.
- *   Will be updated to reflect the new stop range.
- *
- * @return
- *   F_none on success.
- *   F_data_not on success but only white space found.
- *
- *   F_utf_not (with error bit) if a character is not valid UTF-8.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- *
- * @see fl_string_dynamic_partial_rip()
- * @see fl_string_dynamic_partial_rip_nulless()
- * @see fl_string_dynamic_rip()
- * @see fl_string_rip()
- * @see fl_string_rip_nulless()
- */
-#if !defined(_di_fl_string_dynamic_partial_rip_) || !defined(_di_fl_string_dynamic_partial_rip_nulless_) || !defined(_di_fl_string_dynamic_rip_)  || !defined(_di_fl_string_rip_) || !defined(_di_fl_string_rip_nulless_)
-  extern f_status_t private_fl_string_rip_find_range(const f_string_t string, f_array_length_t * const start, f_array_length_t * const stop) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_string_dynamic_partial_rip_) || !defined(_di_fl_string_dynamic_partial_rip_nulless_) || !defined(_di_fl_string_dynamic_rip_)  || !defined(_di_fl_string_rip_) || !defined(_di_fl_string_rip_nulless_)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // _PRIVATE_FL_string_h
diff --git a/level_1/fl_string/c/string.c b/level_1/fl_string/c/string.c
deleted file mode 100644 (file)
index 76d16a7..0000000
+++ /dev/null
@@ -1,1094 +0,0 @@
-#include "string.h"
-#include "private-string.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef _di_fl_string_compare_
-  f_status_t fl_string_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
-
-    return private_fl_string_compare(string1, string2, 0, 0, length1, length2);
-  }
-#endif // _di_fl_string_compare_
-
-#ifndef _di_fl_string_compare_except_
-  f_status_t fl_string_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except(string1, string2, 0, 0, length1, length2, except1, except2);
-  }
-#endif // _di_fl_string_compare_except_
-
-#ifndef _di_fl_string_compare_except_trim_
-  f_status_t fl_string_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except_trim(string1, string2, 0, 0, length1, length2, except1, except2);
-  }
-#endif // _di_fl_string_compare_except_trim_
-
-#ifndef _di_fl_string_compare_trim_
-  f_status_t fl_string_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
-
-    return private_fl_string_compare_trim(string1, string2, 0, 0, length1, length2);
-  }
-#endif // _di_fl_string_compare_trim_
-
-#ifndef _di_fl_string_dynamic_compare_
-  f_status_t fl_string_dynamic_compare(const f_string_static_t string1, const f_string_static_t string2) {
-
-    return private_fl_string_compare(string1.string, string2.string, 0, 0, string1.used, string2.used);
-  }
-#endif // _di_fl_string_dynamic_compare_
-
-#ifndef _di_fl_string_dynamic_compare_except_
-  f_status_t fl_string_dynamic_compare_except(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except(string1.string, string2.string, 0, 0, string1.used, string2.used, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_compare_except_
-
-#ifndef _di_fl_string_dynamic_compare_except_string_
-  f_status_t fl_string_dynamic_compare_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except(string1, string2.string, 0, 0, length1, string2.used, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_compare_except_string_
-
-#ifndef _di_fl_string_dynamic_compare_except_trim_
-  f_status_t fl_string_dynamic_compare_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except_trim(string1.string, string2.string, 0, 0, string1.used, string2.used, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_compare_except_trim_
-
-#ifndef _di_fl_string_dynamic_compare_except_trim_string_
-  f_status_t fl_string_dynamic_compare_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except_trim(string1, string2.string, 0, 0, length1, string2.used, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_compare_except_trim_string_
-
-#ifndef _di_fl_string_dynamic_compare_string_
-  f_status_t fl_string_dynamic_compare_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1) {
-
-    return private_fl_string_compare(string1, string2.string, 0, 0, length1, string2.used);
-  }
-#endif // _di_fl_string_dynamic_compare_string_
-
-#ifndef _di_fl_string_dynamic_compare_trim_
-  f_status_t fl_string_dynamic_compare_trim(const f_string_static_t string1, const f_string_static_t string2) {
-
-    return private_fl_string_compare_trim(string1.string, string2.string, 0, 0, string1.used, string2.used);
-  }
-#endif // _di_fl_string_dynamic_compare_trim_
-
-#ifndef _di_fl_string_dynamic_compare_trim_string_
-  f_status_t fl_string_dynamic_compare_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1) {
-
-    return private_fl_string_compare_trim(string1, string2.string, 0, 0, length1, string2.used);
-  }
-#endif // _di_fl_string_dynamic_compare_trim_string_
-
-#ifndef _di_fl_string_dynamic_partial_compare_
-  f_status_t fl_string_dynamic_partial_compare(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
-
-    return private_fl_string_compare(string1.string, string2.string, range1.start, range2.start, string1.used <= range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_
-
-#ifndef _di_fl_string_dynamic_partial_compare_dynamic_
-  f_status_t fl_string_dynamic_partial_compare_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2) {
-
-    return private_fl_string_compare(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_dynamic_
-
-#ifndef _di_fl_string_dynamic_partial_compare_string_
-  f_status_t fl_string_dynamic_partial_compare_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2) {
-
-    return private_fl_string_compare(string1, string2.string, 0, range2.start, length1, string2.used < range2.stop ? string2.used : range2.stop + 1);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_string_
-
-#ifndef _di_fl_string_dynamic_partial_compare_except_
-  f_status_t fl_string_dynamic_partial_compare_except(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except(string1.string, string2.string, range1.start, range2.start, string1.used < range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_except_
-
-#ifndef _di_fl_string_dynamic_partial_compare_except_dynamic_
-  f_status_t fl_string_dynamic_partial_compare_except_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_except_dynamic_
-
-#ifndef _di_fl_string_dynamic_partial_compare_except_string_
-  f_status_t fl_string_dynamic_partial_compare_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except(string1, string2.string, 0, range2.start, length1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_except_string_
-
-#ifndef _di_fl_string_dynamic_partial_compare_except_trim_
-  f_status_t fl_string_dynamic_partial_compare_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except_trim(string1.string, string2.string, range1.start, range2.start, string1.used <= range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_except_trim_
-
-#ifndef _di_fl_string_dynamic_partial_compare_except_trim_dynamic_
-  f_status_t fl_string_dynamic_partial_compare_except_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except_trim(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_except_trim_dynamic_
-
-#ifndef _di_fl_string_dynamic_partial_compare_except_trim_string_
-  f_status_t fl_string_dynamic_partial_compare_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2) {
-
-    return private_fl_string_compare_except_trim(string1, string2.string, 0, range2.start, length1, string2.used <= range2.stop ? string2.used : range2.stop + 1, except1, except2);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_except_trim_string_
-
-#ifndef _di_fl_string_dynamic_partial_compare_trim_
-  f_status_t fl_string_dynamic_partial_compare_trim(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
-
-    return private_fl_string_compare_trim(string1.string, string2.string, range1.start, range2.start, string1.used <= range1.stop ? string1.used : range1.stop + 1, string2.used <= range2.stop ? string2.used : range2.stop + 1);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_trim_
-
-#ifndef _di_fl_string_dynamic_partial_compare_trim_dynamic_
-  f_status_t fl_string_dynamic_partial_compare_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2) {
-
-    return private_fl_string_compare_trim(string1.string, string2.string, 0, range2.start, string1.used, string2.used <= range2.stop ? string2.used : range2.stop + 1);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_trim_dynamic_
-
-#ifndef _di_fl_string_dynamic_partial_compare_trim_string_
-  f_status_t fl_string_dynamic_partial_compare_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2) {
-
-    return private_fl_string_compare_trim(string1, string2.string, 0, range2.start, length1, string2.used <= range2.stop ? string2.used : range2.stop + 1);
-  }
-#endif // _di_fl_string_dynamic_partial_compare_trim_string_
-
-#ifndef _di_fl_string_dynamic_partial_rip_
-  f_status_t fl_string_dynamic_partial_rip(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!source.used) {
-      return F_data_not_eos;
-    }
-
-    if (range.start > range.stop) {
-      return F_data_not_stop;
-    }
-
-    f_array_length_t begin = range.start;
-    f_array_length_t end = range.stop;
-
-    {
-      const f_status_t status = private_fl_string_rip_find_range(source.string, &begin, &end);
-      if (F_status_is_error(status)) return status;
-
-      if (status == F_data_not) {
-        return status;
-      }
-    }
-
-    if (begin > end) {
-      return F_data_not_stop;
-    }
-
-    return f_string_append(source.string + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_string_dynamic_partial_rip_
-
-#ifndef _di_fl_string_dynamic_partial_rip_nulless_
-  f_status_t fl_string_dynamic_partial_rip_nulless(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!source.used) {
-      return F_data_not_eos;
-    }
-
-    if (range.start > range.stop) {
-      return F_data_not_stop;
-    }
-
-    f_array_length_t begin = range.start;
-    f_array_length_t end = range.stop;
-
-    {
-      const f_status_t status = private_fl_string_rip_find_range(source.string, &begin, &end);
-      if (F_status_is_error(status)) return status;
-
-      if (status == F_data_not) {
-        return status;
-      }
-    }
-
-    if (begin > end) {
-      return F_data_not_stop;
-    }
-
-    return f_string_append_nulless(source.string + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_string_dynamic_partial_rip_nulless_
-
-#ifndef _di_fl_string_dynamic_rip_
-  f_status_t fl_string_dynamic_rip(const f_string_static_t source, f_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!source.used) {
-      return F_data_not_eos;
-    }
-
-    f_array_length_t begin = 0;
-    f_array_length_t end = source.used - 1;
-
-    {
-      const f_status_t status = private_fl_string_rip_find_range(source.string, &begin, &end);
-      if (F_status_is_error(status)) return status;
-
-      if (status == F_data_not) {
-        return status;
-      }
-    }
-
-    if (begin > end) {
-      return F_data_not_stop;
-    }
-
-    return f_string_append(source.string + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_string_dynamic_rip_
-
-#ifndef _di_fl_string_dynamic_rip_nulless_
-  f_status_t fl_string_dynamic_rip_nulless(const f_string_static_t source, f_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!source.used) {
-      return F_data_not_eos;
-    }
-
-    f_array_length_t begin = 0;
-    f_array_length_t end = source.used - 1;
-
-    {
-      const f_status_t status = private_fl_string_rip_find_range(source.string, &begin, &end);
-      if (F_status_is_error(status)) return status;
-
-      if (status == F_data_not) {
-        return status;
-      }
-    }
-
-    if (begin > end) {
-      return F_data_not_stop;
-    }
-
-    return f_string_append_nulless(source.string + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_string_dynamic_rip_nulless_
-
-#ifndef _di_fl_string_dynamic_seek_line_to_utf_character_
-  f_status_t fl_string_dynamic_seek_line_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) {
-      return F_data_not;
-    }
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to_this);
-
-    f_status_t status = F_none;
-
-    unsigned short width = 0;
-    f_array_length_t width_max = 0;
-
-    while (range->start <= range->stop) {
-
-      width_max = (range->stop - range->start) + 1;
-      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
-
-      if (!width) {
-        width = 1;
-
-        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-          return F_none_eol;
-        }
-
-        if (seek_width == width) {
-          if (buffer.string[range->start] == seek_to_this) {
-            return F_none;
-          }
-        }
-      }
-      // Do not operate on UTF-8 fragments that are not the first byte of the character.
-      else if (width == 1) {
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-
-        if (width == seek_width) {
-          f_utf_char_t character = 0;
-
-          status = f_utf_char_to_character(buffer.string + range->start, width_max, &character);
-          if (F_status_is_error(status)) return status;
-
-          if (character == seek_to_this) {
-            return F_none;
-          }
-        }
-      }
-
-      range->start += width;
-
-      if (range->start >= range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    return F_none_eos;
-  }
-#endif // _di_fl_string_dynamic_seek_line_to_utf_character_
-
-#ifndef _di_fl_string_dynamic_seek_line_until_graph_
-  f_status_t fl_string_dynamic_seek_line_until_graph(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) {
-      return F_data_not;
-    }
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_status_t status = F_none;
-    unsigned short width = 0;
-
-    f_array_length_t width_max = (range->stop - range->start) + 1;
-
-    while (buffer.string[range->start] == placeholder || (status = f_utf_is_graph(buffer.string + range->start, width_max)) == F_false) {
-
-      if (F_status_is_error(status)) return status;
-
-      if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-        return F_none_eol;
-      }
-
-      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
-
-      if (!width) {
-        width = 1;
-      }
-      else if (width == 1) {
-
-        // Do not operate on UTF-8 fragments that are not the first byte of the character.
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-      }
-
-      range->start += width;
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-
-      width_max = (range->stop - range->start) + 1;
-    } // while
-
-    if (F_status_is_error(status)) return status;
-
-    return F_none;
-  }
-#endif // _di_fl_string_dynamic_seek_line_until_graph_
-
-#ifndef _di_fl_string_dynamic_seek_line_until_graph_non_
-  f_status_t fl_string_dynamic_seek_line_until_graph_non(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) {
-      return F_data_not;
-    }
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_status_t status = F_none;
-    unsigned short width = 0;
-
-    f_array_length_t width_max = (range->stop - range->start) + 1;
-
-    while (buffer.string[range->start] == placeholder || (status = f_utf_is_whitespace(buffer.string + range->start, width_max, F_false)) == F_false) {
-
-      if (F_status_is_error(status)) return status;
-
-      if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-        return F_none_eol;
-      }
-
-      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
-
-      if (!width) {
-        width = 1;
-      }
-      else if (width == 1) {
-
-        // Do not operate on UTF-8 fragments that are not the first byte of the character.
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-      }
-
-      range->start += width;
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-
-      width_max = (range->stop - range->start) + 1;
-    } // while
-
-    if (F_status_is_error(status)) return status;
-
-    return F_none;
-  }
-#endif // _di_fl_string_dynamic_seek_line_until_graph_non_
-
-#ifndef _di_fl_string_dynamic_seek_to_utf_character_
-  f_status_t fl_string_dynamic_seek_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) {
-      return F_data_not;
-    }
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to_this);
-
-    f_status_t status = F_none;
-
-    unsigned short width = 0;
-
-    f_array_length_t width_max = 0;
-
-    while (range->start <= range->stop) {
-
-      width_max = (range->stop - range->start) + 1;
-      width = macro_f_utf_byte_width_is(buffer.string[range->start]);
-
-      if (!width) {
-        width = 1;
-
-        if (seek_width == width) {
-          if (buffer.string[range->start] == seek_to_this) {
-            return F_none;
-          }
-        }
-      }
-      // Do not operate on UTF-8 fragments that are not the first byte of the character.
-      else if (width == 1) {
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-
-        if (width == seek_width) {
-          f_utf_char_t character = 0;
-
-          status = f_utf_char_to_character(buffer.string + range->start, width_max, &character);
-          if (F_status_is_error(status)) return status;
-
-          if (character == seek_to_this) {
-            return F_none;
-          }
-        }
-      }
-
-      range->start += width;
-
-      if (range->start >= range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    return F_none_eos;
-  }
-#endif // _di_fl_string_dynamic_seek_to_utf_character_
-
-#ifndef _di_fl_string_dynamic_partial_fll_identify_
-  f_status_t fl_string_dynamic_partial_fll_identify(const f_string_static_t buffer, f_string_range_t * const range, f_fll_id_t * const id) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (id) {
-      id->type = 0;
-      id->used = 0;
-    }
-
-    // Skip past all leading NULLs.
-    for (; range->start <= range->stop; ++range->start) {
-      if (buffer.string[range->start]) break;
-    } // for
-
-    if (range->start > range->stop) {
-      return F_data_not;
-    }
-
-    // The FLL Identifier is always at least 6 characters ("X-0000").
-    if (range->stop - range->start < 5) {
-
-      // Increment until stop, while taking into consideration UTF-8 character widths.
-      for (; range->start <= range->stop; ) {
-
-        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-          ++range->start;
-
-          break;
-        }
-
-        range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-      } // for
-
-      return F_found_not;
-    }
-
-    f_status_t status = F_none;
-
-    for (; range->start <= range->stop; ) {
-
-      status = f_utf_is_whitespace(buffer.string + range->start, (range->stop - range->start) + 1, F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_maybe) {
-          return F_status_set_error(F_complete_not_utf);
-        }
-
-        return status;
-      }
-
-      if (status == F_false) {
-        if (!buffer.string[range->start]) {
-          ++range->start;
-
-          continue;
-        }
-
-        break;
-      }
-
-      if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-        ++range->start;
-
-        return F_found_not;
-      }
-
-      range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-    } // for
-
-    if (range->start > range->stop) {
-      return F_found_not;
-    }
-
-    if (range->stop - range->start < 5) {
-
-      // Increment until stop, while taking into consideration UTF-8 character widths.
-      for (; range->start <= range->stop; ) {
-
-        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-          ++range->start;
-
-          break;
-        }
-
-        range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-      } // for
-
-      return F_found_not;
-    }
-
-    f_array_length_t i = range->start;
-
-    for (; range->start <= range->stop; ) {
-
-      status = f_utf_is_word(buffer.string + range->start, (range->stop - range->start) + 1, F_true);
-      if (F_status_is_error(status)) return status;
-
-      if (status == F_false) {
-        if (!buffer.string[range->start]) {
-          ++range->start;
-
-          continue;
-        }
-
-        break;
-      }
-
-      range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-    } // for
-
-    if (range->start > range->stop || buffer.string[range->start] != f_string_ascii_minus_s.string[0]) {
-
-      // Increment until stop, while taking into consideration UTF-8 character widths.
-      for (; range->start <= range->stop; ) {
-
-        if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-          ++range->start;
-
-          break;
-        }
-
-        range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-      } // for
-
-      return F_found_not;
-    }
-
-    {
-      f_array_length_t j = 0;
-      f_char_t number[5] = { 0, 0, 0, 0, 0 };
-
-      for (++range->start; range->start <= range->stop && j < 4; ++range->start, ++j) {
-
-        // The hexidecimal representing the number may only be ASCII.
-        if (macro_f_utf_byte_width_is(buffer.string[range->start])) {
-
-          // Increment until stop, while taking into consideration UTF-8 character widths.
-          for (; range->start <= range->stop; ) {
-
-            if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-              ++range->start;
-
-              break;
-            }
-
-            range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-          } // for
-
-          if (id) {
-            id->type = 0;
-          }
-
-          return F_found_not;
-        }
-
-        if (isxdigit(buffer.string[range->start])) {
-          number[j] = buffer.string[range->start];
-        }
-        else {
-          if (!buffer.string[range->start]) continue;
-
-          break;
-        }
-      } // for
-
-      if (j == 4) {
-        if (id) {
-          id->type = strtol(number, 0, 16);
-        }
-      }
-      else {
-
-        // Increment until stop, while taking into consideration UTF-8 character widths.
-        for (; range->start <= range->stop; ) {
-
-          if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-            ++range->start;
-
-            break;
-          }
-
-          range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-        } // for
-
-        if (id) {
-          id->type = 0;
-        }
-
-        return F_found_not;
-      }
-    }
-
-    // Skip past all NULLs.
-    for (; range->start <= range->stop; ++range->start) {
-      if (buffer.string[range->start]) break;
-    } // for
-
-    // The end of line, whitespace, or range stop point are the only valid stop points.
-    if (range->start <= range->stop) {
-      status = f_utf_is_whitespace(buffer.string + range->start, (range->stop - range->start) + 1, F_false);
-
-      if (F_status_is_error(status)) {
-        if (id) {
-          id->type = 0;
-        }
-
-        return status;
-      }
-
-      if (status == F_false) {
-
-        // Increment until stop, while taking into consideration UTF-8 character widths.
-        for (; range->start <= range->stop; ) {
-
-          if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-            ++range->start;
-
-            break;
-          }
-
-          range->start += macro_f_utf_byte_width(buffer.string[range->start]);
-        } // for
-
-        if (id) {
-          id->type = 0;
-        }
-
-        return F_found_not;
-      }
-    }
-
-    if (buffer.string[range->start] == f_string_eol_s.string[0]) {
-      ++range->start;
-    }
-
-    if (id) {
-      for (f_array_length_t j = i, i = 0; j <= range->stop; ++j) {
-
-        if (!buffer.string[j]) continue;
-        if (buffer.string[j] == f_string_ascii_minus_s.string[0]) break;
-
-        id->name[i++] = buffer.string[j];
-      } // for
-
-      id->used = i + 1;
-
-      if (id->used < 64) {
-        id->name[id->used] = 0;
-      }
-    }
-
-    return F_found;
-  }
-#endif // _di_fl_string_dynamic_partial_fll_identify_
-
-#ifndef _di_fl_string_rip_
-  f_status_t fl_string_rip(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!length) {
-      return F_data_not_eos;
-    }
-
-    f_array_length_t begin = 0;
-    f_array_length_t end = length - 1;
-
-    const f_status_t status = private_fl_string_rip_find_range(source, &begin, &end);
-    if (F_status_is_error(status)) return status;
-
-    if (status == F_data_not) {
-      return status;
-    }
-
-    return f_string_append(source + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_string_rip_
-
-#ifndef _di_fl_string_rip_nulless_
-  f_status_t fl_string_rip_nulless(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!length) {
-      return F_data_not_eos;
-    }
-
-    f_array_length_t begin = 0;
-    f_array_length_t end = length - 1;
-
-    const f_status_t status = private_fl_string_rip_find_range(source, &begin, &end);
-    if (F_status_is_error(status)) return status;
-
-    if (status == F_data_not) {
-      return status;
-    }
-
-    return f_string_append_nulless(source + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_string_rip_nulless_
-
-#ifndef _di_fl_string_seek_line_to_utf_character_
-  f_status_t fl_string_seek_line_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to);
-
-    f_status_t status = F_none;
-
-    unsigned short width = 0;
-    f_array_length_t width_max = (range->stop - range->start) + 1;
-
-    for (; range->start <= range->stop; range->start += width) {
-
-      width_max = (range->stop - range->start) + 1;
-
-      width = macro_f_utf_byte_width_is(string[range->start]);
-
-      if (!width) {
-        width = 1;
-
-        if (string[range->start] == f_string_eol_s.string[0]) {
-          return F_none_eol;
-        }
-
-        if (seek_width == width) {
-          if (string[range->start] == seek_to) {
-            return F_none;
-          }
-        }
-      }
-      // Do not operate on UTF-8 fragments that are not the first byte of the character.
-      else if (width == 1) {
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_eos);
-        }
-
-        if (width == seek_width) {
-          f_utf_char_t character = 0;
-
-          status = f_utf_char_to_character(string + range->start, width_max, &character);
-          if (F_status_is_error(status)) return status;
-
-          if (character == seek_to) {
-            return F_none;
-          }
-        }
-      }
-    } // for
-
-    return F_none_stop;
-  }
-#endif // _di_fl_string_seek_line_to_utf_character_
-
-#ifndef _di_fl_string_seek_line_until_graph_
-  f_status_t fl_string_seek_line_until_graph(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_status_t status = F_none;
-    unsigned short width = 0;
-
-    f_array_length_t width_max = (range->stop - range->start) + 1;
-
-    while (string[range->start] == placeholder || (status = f_utf_is_graph(string + range->start, width_max)) == F_false) {
-
-      if (F_status_is_error(status)) return status;
-
-      if (string[range->start] == f_string_eol_s.string[0]) {
-        return F_none_eol;
-      }
-
-      width = macro_f_utf_byte_width_is(string[range->start]);
-
-      if (!width) {
-        width = 1;
-      }
-      else if (width == 1) {
-
-        // Do not operate on UTF-8 fragments that are not the first byte of the character.
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-      }
-
-      range->start += width;
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-
-      width_max = (range->stop - range->start) + 1;
-    } // while
-
-    if (F_status_is_error(status)) return status;
-
-    return F_none;
-  }
-#endif // _di_fl_string_seek_line_until_graph_
-
-#ifndef _di_fl_string_seek_line_until_graph_non_
-  f_status_t fl_string_seek_line_until_graph_non(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_status_t status = F_none;
-    unsigned short width = 0;
-
-    f_array_length_t width_max = (range->stop - range->start) + 1;
-
-    while (string[range->start] == placeholder || (status = f_utf_is_whitespace(string + range->start, width_max, F_false)) == F_false) {
-
-      if (F_status_is_error(status)) return status;
-
-      if (string[range->start] == f_string_eol_s.string[0]) {
-        return F_none_eol;
-      }
-
-      width = macro_f_utf_byte_width_is(string[range->start]);
-
-      if (!width) {
-        width = 1;
-      }
-      else if (width == 1) {
-
-        // Do not operate on UTF-8 fragments that are not the first byte of the character.
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-      }
-
-      range->start += width;
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-
-      width_max = (range->stop - range->start) + 1;
-    } // while
-
-    if (F_status_is_error(status)) return status;
-
-    return F_none;
-  }
-#endif // _di_fl_string_seek_line_until_graph_non_
-
-#ifndef _di_fl_string_seek_to_utf_character_
-  f_status_t fl_string_seek_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    const unsigned short seek_width = macro_f_utf_char_t_width(seek_to);
-
-    f_status_t status = F_none;
-
-    unsigned short width = 0;
-    f_array_length_t width_max = 0;
-
-    for (; range->start <= range->stop; range->start += width) {
-
-      width_max = (range->stop - range->start) + 1;
-
-      width = macro_f_utf_byte_width_is(string[range->start]);
-
-      if (!width) {
-        width = 1;
-
-        if (seek_width == width) {
-          if (string[range->start] == seek_to) {
-            return F_none;
-          }
-        }
-      }
-      // Do not operate on UTF-8 fragments that are not the first byte of the character.
-      else if (width == 1) {
-        return F_status_set_error(F_complete_not_utf);
-      }
-      else {
-        if (range->start + width > range->stop) {
-          return F_status_set_error(F_complete_not_utf_stop);
-        }
-
-        if (width == seek_width) {
-          f_utf_char_t character = 0;
-
-          status = f_utf_char_to_character(string + range->start, width_max, &character);
-          if (F_status_is_error(status)) return status;
-
-          if (character == seek_to) {
-            return F_none;
-          }
-        }
-      }
-    } // for
-
-    return F_none_stop;
-  }
-#endif // _di_fl_string_seek_to_utf_character_
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
diff --git a/level_1/fl_string/c/string.h b/level_1/fl_string/c/string.h
deleted file mode 100644 (file)
index 79732cf..0000000
+++ /dev/null
@@ -1,1237 +0,0 @@
-/**
- * FLL - Level 1
- *
- * Project: String
- * API Version: 0.7
- * Licenses: lgpl-2.1-or-later
- *
- * Provides basic string manipulation and processing capabilities.
- *
- * UTF-8 is handled within these functions via normal string characters (f_string_t).
- * Unlike f_utf_string_t, these f_string_t base functions do not force padding of ASCII or UTF-8 characters.
- * With f_string_t, a 1-byte wide ASCII character is stored as 1 byte and a 4-byte wide UTF-8 character is stored as 4 bytes.
- *
- * This shortens the size of the string at the cost of complexity vs f_utf_string_t.
- *
- * Because of the variable width, it is generally unsafe to ignore invalid UTF-8 sequences.
- * Invalid UTF-8 will be generally result in an error.
- */
-#ifndef _FL_string_h
-#define _FL_string_h
-
-// Libc includes.
-#include <ctype.h>
-#include <string.h>
-
-// FLL-0 includes.
-#include <fll/level_0/type.h>
-#include <fll/level_0/status.h>
-#include <fll/level_0/memory.h>
-#include <fll/level_0/string.h>
-#include <fll/level_0/utf.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   Length of string1.
- * @param length2
- *   Length of string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_compare_
-  extern f_status_t fl_string_compare(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
-#endif // _di_fl_string_compare_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   Length of string1.
- * @param length2
- *   Length of string2.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_compare_except_
-  extern f_status_t fl_string_compare_except(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_compare_except_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   Length of string1.
- * @param length2
- *   Length of string2.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_compare_except_trim_
-  extern f_status_t fl_string_compare_except_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_compare_except_trim_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   Length of string1.
- * @param length2
- *   Length of string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_compare_trim_
-  extern f_status_t fl_string_compare_trim(const f_string_t string1, const f_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
-#endif // _di_fl_string_compare_trim_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_compare_
-  extern f_status_t fl_string_dynamic_compare(const f_string_static_t string1, const f_string_static_t string2);
-#endif // _di_fl_string_dynamic_compare_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_compare_except_
-  extern f_status_t fl_string_dynamic_compare_except(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_compare_except_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_compare_except_string_
-  extern f_status_t fl_string_dynamic_compare_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_compare_except_string_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_compare_except_trim_
-  extern f_status_t fl_string_dynamic_compare_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_compare_except_trim_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_compare_except_trim_string_
-  extern f_status_t fl_string_dynamic_compare_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_compare_except_trim_string_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_compare_string_
-  extern f_status_t fl_string_dynamic_compare_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1);
-#endif // _di_fl_string_dynamic_compare_string_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_compare_trim_
-  extern f_status_t fl_string_dynamic_compare_trim(const f_string_static_t string1, const f_string_static_t string2);
-#endif // _di_fl_string_dynamic_compare_trim_
-
-/**
- * Compare two strings, similar to strncmp().
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_compare_trim_string_
-  extern f_status_t fl_string_dynamic_compare_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1);
-#endif // _di_fl_string_dynamic_compare_trim_string_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given ranges.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range1
- *   A range within the string1 to restrict the comparison to.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_compare_
-  extern f_status_t fl_string_dynamic_partial_compare(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2);
-#endif // _di_fl_string_dynamic_partial_compare_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_compare_dynamic_
-  extern f_status_t fl_string_dynamic_partial_compare_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2);
-#endif // _di_fl_string_dynamic_partial_compare_dynamic_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given ranges.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range1
- *   A range within the string1 to restrict the comparison to.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_compare_except_
-  extern f_status_t fl_string_dynamic_partial_compare_except(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_partial_compare_except_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_compare_except_dynamic_
-  extern f_status_t fl_string_dynamic_partial_compare_except_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_partial_compare_except_dynamic_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_compare_except_string_
-  extern f_status_t fl_string_dynamic_partial_compare_except_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_partial_compare_except_string_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given ranges.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range1
- *   A range within the string1 to restrict the comparison to.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_partial_compare_except_trim_
-  extern f_status_t fl_string_dynamic_partial_compare_except_trim(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_partial_compare_except_trim_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_partial_compare_except_trim_dynamic_
-  extern f_status_t fl_string_dynamic_partial_compare_except_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_partial_compare_except_trim_dynamic_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- * All 1-byte characters in except1 and except2 are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- * @param except1
- *   A set of locations within string1 to ignore.
- *   This assumes/requires that the locations be in linear order.
- * @param except2
- *   A set of locations within string2 to ignore.
- *   This assumes/requires that the locations be in linear order.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_partial_compare_except_trim_string_
-  extern f_status_t fl_string_dynamic_partial_compare_except_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2, const f_array_lengths_t except1, const f_array_lengths_t except2);
-#endif // _di_fl_string_dynamic_partial_compare_except_trim_string_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_compare_string_
-  extern f_status_t fl_string_dynamic_partial_compare_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2);
-#endif // _di_fl_string_dynamic_partial_compare_string_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_partial_compare_trim_dynamic_
-  extern f_status_t fl_string_dynamic_partial_compare_trim_dynamic(const f_string_static_t string1, const f_string_static_t string2, const f_string_range_t range2);
-#endif // _di_fl_string_dynamic_partial_compare_trim_dynamic_
-
-/**
- * Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
- *
- * This operates with the first string being a traditional string.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   The length of string1.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_dynamic_partial_compare_trim_string_
-  extern f_status_t fl_string_dynamic_partial_compare_trim_string(const f_string_t string1, const f_string_static_t string2, const f_array_length_t length1, const f_string_range_t range2);
-#endif // _di_fl_string_dynamic_partial_compare_trim_string_
-
-/**
- * Allocate a new string from the provided range in the buffer.
- *
- * Ignores leading and trailing whitespace.
- * Ignores leading and trailing NULL characters.
- * As a result, resulting size may be smaller than requested range.
- *
- * @param source
- *   The buffer to rip from.
- * @param range
- *   A range within the buffer representing the string to rip.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not_eos if source length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_string_too_large (with error bit) if the combined string is too large.
- */
-#ifndef _di_fl_string_dynamic_partial_rip_
-  extern f_status_t fl_string_dynamic_partial_rip(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination);
-#endif // _di_fl_string_dynamic_partial_rip_
-
-/**
- * Allocate a new string from the provided range in the buffer.
- *
- * Ignores leading and trailing whitespace.
- * Ignores leading and trailing NULL characters.
- * As a result, resulting size may be smaller than requested range.
- *
- * Skips over NULL characters from source when appending.
- *
- * @param source
- *   The string to rip from.
- * @param range
- *   A range within the buffer representing the string to rip.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not_eos if source length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_partial_rip_nulless_
-  extern f_status_t fl_string_dynamic_partial_rip_nulless(const f_string_static_t source, const f_string_range_t range, f_string_dynamic_t * const destination);
-#endif // _di_fl_string_dynamic_partial_rip_nulless_
-
-/**
- * Allocate a new string from the provided range in the buffer.
- *
- * Ignores leading and trailing whitespace.
- * Ignores leading and trailing NULL characters.
- * As a result, resulting size may be smaller than requested range.
- *
- * @param source
- *   The buffer to rip from.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not_eos if source length is 0.
- *
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_string_too_large (with error bit) if the combined string is too large.
- */
-#ifndef _di_fl_string_dynamic_rip_
-  extern f_status_t fl_string_dynamic_rip(const f_string_static_t source, f_string_dynamic_t * const destination);
-#endif // _di_fl_string_dynamic_rip_
-
-/**
- * Allocate a new string from the provided range in the buffer.
- *
- * Ignores leading and trailing whitespace.
- * Ignores leading and trailing NULL characters.
- * As a result, resulting size may be smaller than requested range.
- *
- * Skips over NULL characters from source when appending.
- *
- * @param source
- *   The string to rip from.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not_eos if source length is 0.
- *
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_string_dynamic_rip_nulless_
-  extern f_status_t fl_string_dynamic_rip_nulless(const f_string_static_t source, f_string_dynamic_t * const destination);
-#endif // _di_fl_string_dynamic_rip_nulless_
-
-/**
- * Seek the buffer location forward until the character (up to 4-byte wide) or EOL is reached.
- *
- * @param buffer
- *   The string to traverse.
- * @param seek_to_this
- *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_stop on success, but stopped at end of range.
- *   F_data_not on success, but there was no string data to seek.
- *   F_data_not_stop on success, but the range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
- *
- *   Errors (with error bit) from: f_utf_char_to_character().
- *
- * @see f_utf_char_to_character()
- */
-#ifndef _di_fl_string_dynamic_seek_line_to_utf_character_
-  extern f_status_t fl_string_dynamic_seek_line_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range);
-#endif // _di_fl_string_dynamic_seek_line_to_utf_character_
-
-/**
- * Increment buffer location until a graph character (including UTF-8) or an EOL is matched.
- *
- * @param buffer
- *   The string to traverse.
- * @param placeholder
- *   A single-width character representing a placeholder to ignore (may be NULL).
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_stop on success, but stopped at end of range.
- *   F_data_not on success, but there was no string data to seek.
- *   F_data_not_stop on success, but the range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_is_graph().
- *
- * @see f_utf_is_graph()
- */
-#ifndef _di_fl_string_dynamic_seek_line_until_graph_
-  extern f_status_t fl_string_dynamic_seek_line_until_graph(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range);
-#endif // _di_fl_string_dynamic_seek_line_until_graph_
-
-/**
- * Increment buffer location until a non-graph character (including UTF-8) or an EOL is matched.
- *
- * @param buffer
- *   The string to traverse.
- * @param placeholder
- *   A single-width character representing a placeholder to ignore (may be NULL).
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_stop on success, but stopped at end of range.
- *   F_data_not on success, but there was no string data to seek.
- *   F_data_not_stop on success, but the range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_is_graph().
- *
- * @see f_utf_is_graph()
- */
-#ifndef _di_fl_string_dynamic_seek_line_until_graph_non_
-  extern f_status_t fl_string_dynamic_seek_line_until_graph_non(const f_string_static_t buffer, const uint8_t placeholder, f_string_range_t * const range);
-#endif // _di_fl_string_dynamic_seek_line_until_graph_non_
-
-/**
- * Seek the buffer location forward until the UTF-8 character (up to 4-byte wide) is reached.
- *
- * @param buffer
- *   The string to traverse.
- * @param seek_to_this
- *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- *
- * @return
- *   F_none on success.
- *   F_none_stop on success, but stopped at end of range.
- *   F_data_not on success, but there was no string data to seek.
- *   F_data_not_stop on success, but the range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
- *
- *   Errors (with error bit) from: f_utf_char_to_character().
- *
- * @see f_utf_char_to_character()
- */
-#ifndef _di_fl_string_dynamic_seek_to_utf_character_
-  extern f_status_t fl_string_dynamic_seek_to_utf_character(const f_string_static_t buffer, const f_utf_char_t seek_to_this, f_string_range_t * const range);
-#endif // _di_fl_string_dynamic_seek_to_utf_character_
-
-/**
- * Identify whether or not the given string represents a single valid FLL Identifier and possibly save the FLL Identifier.
- *
- * This will always change the FLL Identifier used and type codes, if a FLL Identifier is provided.
- *
- * Whitespace may be before and after the FLL Identifier and will be ignored.
- * NULLs will be ignored.
- * Anything else will result in treating the character as a possible FLL Identifier.
- *
- * A valid FLL Identifier must terminate on either whitespace, EOL, or the stop point (length).
- *
- * The id.name might not be NULL terminated.
- * An id.name using all 64-bytes will not be NULL terminated.
- *
- * If a newline ("\n") is encountered, range->start will be set to 1 byte after the newline.
- *
- * @param buffer
- *   The string to process.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The caller must ensure that the stop point does not exceed the buffer size.
- *
- *   The range->start will be updated by this function.
- *   On error, the range->start may represent the last position looked at.
- *   On success, the range->start should be after the last valid position (for example for "fss-1234", the ast valid position would be the byte after the "4").
- *   Be aware that if a UTF-8 character exists at the end of the string but extends beyond the range stop, the stop position may be after the UTF-8 byte and not 1 byte after the stop point.
- * @param id
- *   (optional) The FLL Identifier found.
- *   Set to NULL to not use.
- *
- * @return
- *   F_data_not if length is 0.
- *   F_found if the buffer does represent a valid FLL Identifier.
- *   F_found_not if the buffer does not represent a valid FLL Identifier.
- *
- *   F_complete_not_utf (with error bit) if a character is an incomplete UTF-8 fragment.
- *   F_maybe (with error bit) if a character could be a whitespace but width is not long enough. (This is only returned for an otherwise valid FLL Identifier.)
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *   F_parameter (with error bit) from: f_utf_is_word().
- *
- * @see isxdigit()
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- * @see f_utf_is_word()
- */
-#ifndef _di_fl_string_dynamic_partial_fll_identify_
-  extern f_status_t fl_string_dynamic_partial_fll_identify(const f_string_static_t buffer, f_string_range_t * const range, f_fll_id_t * const id);
-#endif // _di_fl_string_dynamic_partial_fll_identify_
-
-/**
- * Allocate a new string from the provided range in the string.
- *
- * Ignores leading and trailing whitespace.
- * Ignores leading and trailing NULL characters.
- * As a result, resulting size may be smaller than requested length.
- *
- * @param source
- *   The string to rip from.
- * @param length
- *   The length of source to append.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not_eos if source length is 0.
- *
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_rip_
-  extern f_status_t fl_string_rip(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination);
-#endif // _di_fl_string_rip_
-
-/**
- * Allocate a new string from the provided range in the string.
- *
- * Ignores leading and trailing whitespace.
- * Ignores leading and trailing NULL characters.
- * As a result, resulting size may be smaller than requested length.
- *
- * Skips over NULL characters from source when ripping.
- *
- * @param source
- *   The string to rip from.
- * @param length
- *   The length of source to append.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not_eos if source length is 0.
- *
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_rip_nulless_
-  extern f_status_t fl_string_rip_nulless(const f_string_t source, const f_array_length_t length, f_string_dynamic_t * const destination);
-#endif // _di_fl_string_rip_nulless_
-
-/**
- * Seek the string location forward until the character (up to 4-byte wide) or EOL is reached.
- *
- * @param string
- *   The string to traverse.
- * @param seek_to
- *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
- *
- *   Errors (with error bit) from: f_utf_char_to_character().
- *
- * @see f_utf_char_to_character()
- */
-#ifndef _di_fl_string_seek_line_to_utf_character_
-  extern f_status_t fl_string_seek_line_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range);
-#endif // _di_fl_string_seek_line_to_utf_character_
-
-/**
- * Increment string location until a graph character (including UTF-8) or an EOL is matched.
- *
- * @param string
- *   The string to traverse.
- * @param placeholder
- *   A single-width character representing a placeholder to ignore (may be NULL).
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_is_graph().
- *
- * @see f_utf_is_graph()
- */
-#ifndef _di_fl_string_seek_line_until_graph_
-  extern f_status_t fl_string_seek_line_until_graph(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range);
-#endif // _di_fl_string_seek_line_until_graph_
-
-/**
- * Increment string location until a non-graph character (including UTF-8) or an EOL is matched.
- *
- * @param string
- *   The string to traverse.
- * @param placeholder
- *   A single-width character representing a placeholder to ignore (may be NULL).
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_stop on success, but stopped stop location.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_memory_not (with error bit) on out of memory.
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   F_parameter (with error bit) from: f_utf_is_combining().
- *   F_parameter (with error bit) from: f_utf_is_whitespace().
- *
- * @see f_utf_is_combining()
- * @see f_utf_is_whitespace()
- */
-#ifndef _di_fl_string_seek_line_until_graph_non_
-  extern f_status_t fl_string_seek_line_until_graph_non(const f_string_t string, const uint8_t placeholder, f_string_range_t * const range);
-#endif // _di_fl_string_seek_line_until_graph_non_
-
-/**
- * Seek the string location forward until the UTF-8 character (up to 4-byte wide) is reached.
- *
- * @param string
- *   The string to traverse.
- * @param seek_to
- *   A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- *
- * @return
- *   F_none on success.
- *   F_none_stop on success, but stopped stop location.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
- *   F_complete_not_utf_stop (with error bit) if the stop location is reached before the complete UTF-8 character can be processed.
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_not (with error bit) if character is an invalid UTF-8 character.
- *
- *   Errors (with error bit) from: f_utf_char_to_character().
- *
- * @see f_utf_char_to_character()
- */
-#ifndef _di_fl_string_seek_to_utf_character_
-  extern f_status_t fl_string_seek_to_utf_character(const f_string_t string, const f_utf_char_t seek_to, f_string_range_t * const range);
-#endif // _di_fl_string_seek_to_utf_character_
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // _FL_string_h
index fa15a5ef98ac709c693243417fa3004cb0453e72..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,241 +0,0 @@
-#include "utf.h"
-#include "private-utf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(_di_fl_utf_string_compare_) || !defined(_di_fl_utf_string_dynamic_compare_) || !defined(_di_fl_utf_string_dynamic_partial_compare_)
-  f_status_t private_fl_utf_string_compare(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
-
-    f_array_length_t i1 = offset1;
-    f_array_length_t i2 = offset2;
-
-    for (; i1 < stop1 && i2 < stop2; ++i1, ++i2) {
-
-      // Skip past NULL in string1.
-      while (i1 < stop1 && !string1[i1]) ++i1;
-      if (i1 == stop1) break;
-
-      // Skip past NULL in string2.
-      while (i2 < stop2 && !string2[i2]) ++i2;
-      if (i2 == stop2) break;
-
-      if (string1[i1] != string2[i2]) return F_equal_to_not;
-    } // for
-
-    // Only return F_equal_to if all remaining characters are NULL.
-    for (; i1 < stop1; ++i1) {
-      if (string1[i1] != 0) return F_equal_to_not;
-    } // for
-
-    for (; i2 < stop2; ++i2) {
-      if (string2[i2] != 0) return F_equal_to_not;
-    } // for
-
-    return F_equal_to;
-  }
-#endif // !defined(_di_fl_utf_string_compare_) || !defined(_di_fl_utf_string_dynamic_compare_) || !defined(_di_fl_utf_string_dynamic_partial_compare_)
-
-#if !defined(_di_fl_utf_string_compare_trim_) || !defined(_di_fl_utf_string_dynamic_compare_trim_) || !defined(_di_fl_utf_string_dynamic_partial_compare_trim_)
-  f_status_t private_fl_utf_string_compare_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) {
-
-    f_array_length_t i1 = offset1;
-    f_array_length_t i2 = offset2;
-
-    f_status_t status = F_none;
-
-    // Skip past leading whitespace in string1.
-    for (; i1 < stop1; ++i1) {
-
-      // Skip past NULL in string1.
-      while (i1 < stop1 && !string1[i1]) ++i1;
-      if (i1 == stop1) break;
-
-      status = f_utf_character_is_whitespace(string1[i1], F_false);
-
-      if (F_status_is_error(status)) {
-
-        // Ignore possibly invalid UTF-8 codes.
-        if (F_status_set_fine(status) != F_maybe) {
-          return status;
-        }
-      }
-
-      if (status == F_false) break;
-    } // for
-
-    // Skip past leading whitespace in string2.
-    for (; i2 < stop2; i2++) {
-
-      // Skip past NULL in string2.
-      while (i2 < stop2 && !string2[i2]) ++i2;
-      if (i2 == stop2) break;
-
-      status = f_utf_character_is_whitespace(string2[i2], F_false);
-
-      if (F_status_is_error(status)) {
-
-        // Ignore possibly invalid UTF-8 codes.
-        if (F_status_set_fine(status) != F_maybe) {
-          return status;
-        }
-      }
-
-      if (status == F_false) break;
-    } // for
-
-    f_array_length_t last1 = i1;
-    f_array_length_t last2 = i2;
-
-    {
-      // The size1 and size2 are to represent to total number of characters after trim.
-      f_array_length_t size1 = 0;
-      f_array_length_t size2 = 0;
-      f_array_length_t j = 0;
-
-      // Determine where the last non-whitespace is in string1.
-      for (j = i1; j < stop1; ++j) {
-
-        // Skip past NULL in string1.
-        while (j < stop1 && !string1[j]) ++j;
-        if (j == stop1) break;
-
-        status = f_utf_character_is_whitespace(string1[j], F_false);
-
-        if (F_status_is_error(status)) {
-          // ignore possibly invalid UTF-8 codes.
-          if (F_status_set_fine(status) != F_maybe) {
-            return status;
-          }
-        }
-
-        if (status == F_false) {
-          last1 = j;
-          ++size1;
-        }
-      } // for
-
-      // Determine where the last non-whitespace is in string2.
-      for (j = i2; j < stop2; ++j) {
-
-        // Skip past NULL in string2.
-        while (j < stop2 && !string2[j]) ++j;
-        if (j == stop2) break;
-
-        status = f_utf_character_is_whitespace(string2[j], F_false);
-
-        if (F_status_is_error(status)) {
-
-          // Ignore possibly invalid UTF-8 codes.
-          if (F_status_set_fine(status) != F_maybe) {
-            return status;
-          }
-        }
-
-        if (status == F_false) {
-          last2 = j;
-          ++size2;
-        }
-      } // for
-
-      if (size1 != size2) {
-        return F_equal_to_not;
-      }
-    }
-
-    for (; i1 < last1 && i2 < last2; ++i1, ++i2) {
-
-      // Skip past NULL in string1.
-      while (i1 < last1 && !string1[i1]) ++i1;
-      if (i1 == last1) break;
-
-      // Skip past NULL in string2.
-      while (i2 < last2 && !string2[i2]) ++i2;
-      if (i2 == last2) break;
-
-      if (string1[i1] != string2[i2]) return F_equal_to_not;
-    } // for
-
-    // Only return F_equal_to if all remaining characters are NULL.
-    for (; i1 < last1; ++i1) {
-      if (string1[i1] != 0) return F_equal_to_not;
-    } // for
-
-    for (; i2 < last2; ++i2) {
-      if (string2[i2] != 0) return F_equal_to_not;
-    } // for
-
-    return F_equal_to;
-  }
-#endif // !defined(_di_fl_utf_string_compare_trim_) || !defined(_di_fl_utf_string_dynamic_compare_trim_) || !defined(_di_fl_utf_string_dynamic_partial_compare_trim_)
-
-#if !defined(_di_fl_utf_string_rip_) || !defined(_di_fl_utf_string_dynamic_rip_) || !defined(_di_fl_utf_string_rip_nulless_) || !defined(_di_fl_utf_string_dynamic_rip_nulless_)
-  f_status_t private_fl_utf_string_rip_find_range(const f_utf_string_t source, f_array_length_t *start, f_array_length_t *stop) {
-
-    f_status_t status = F_none;
-
-    // Skip past leading whitespace.
-    for (; *start <= *stop; ++(*start)) {
-
-      // Skip past NULL.
-      while (*start < *stop && !source[*start]) ++(*start);
-      if (*start > *stop) break;
-
-      status = f_utf_character_is_whitespace(source[*start], F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_maybe) {
-          return F_status_set_error(F_utf_not);
-        }
-
-        return status;
-      }
-
-      if (status == F_false) break;
-    } // for
-
-    for (; *stop > *start; --(*stop)) {
-
-      // Skip past NULL.
-      while (*stop > *start && !source[*stop]) --(*stop);
-
-      if (!source[*stop]) continue;
-      if (*stop == *start) break;
-
-      status = f_utf_character_is_whitespace(source[*stop], F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_maybe) {
-          return F_status_set_error(F_utf_not);
-        }
-
-        return status;
-      }
-
-      if (status == F_false) break;
-    } // for
-
-    if (*stop == *start) {
-      status = f_utf_character_is_whitespace(source[*stop], F_false);
-
-      if (F_status_is_error(status)) {
-        if (F_status_set_fine(status) == F_maybe) {
-          return F_status_set_error(F_utf_not);
-        }
-
-        return status;
-      }
-
-      if (status == F_true) {
-        return F_data_not;
-      }
-    }
-
-    return F_none;
-  }
-#endif // !defined(_di_fl_utf_string_rip_) || !defined(_di_fl_utf_string_dynamic_rip_) || !defined(_di_fl_utf_string_rip_nulless_) || !defined(_di_fl_utf_string_dynamic_rip_nulless_)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
index db34307a6d69cb7506e55965bcb947c45c8ed7bd..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,119 +0,0 @@
-/**
- * FLL - Level 1
- *
- * Project: Utf
- * 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_FL_utf_h
-#define _PRIVATE_FL_utf_h
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Private implementation of fl_utfl_string_compare().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param offset1
- *   Offset of string1 to start at.
- * @param offset2
- *   Offset of string2 to start at.
- * @param stop1
- *   Exclusive stop position for string1.
- * @param stop2
- *   Exclusive stop position for string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- * @see fl_utf_string_compare()
- * @see fl_utf_string_dynamic_compare()
- * @see fl_utf_string_dynamic_partial_compare()
- */
-#if !defined(_di_fl_utf_string_compare_) || !defined(_di_fl_utf_string_dynamic_compare_) || !defined(_di_fl_utf_string_dynamic_partial_compare_)
-  extern f_status_t private_fl_utf_string_compare(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_utf_string_compare_) || !defined(_di_fl_utf_string_dynamic_compare_) || !defined(_di_fl_utf_string_dynamic_partial_compare_)
-
-/**
- * Private implementation of fl_utf_string_compare_trim().
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param offset1
- *   Offset of string1 to start at.
- * @param offset2
- *   Offset of string2 to start at.
- * @param stop1
- *   Exclusive stop position for string1.
- * @param stop2
- *   Exclusive stop position for string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace()
- *
- * @see f_utf_character_is_whitespace()
- * @see fl_utf_string_compare_trim()
- * @see fl_utf_string_dynamic_compare_trim()
- * @see fl_utf_string_dynamic_partial_compare_trim()
- */
-#if !defined(_di_fl_utf_string_compare_trim_) || !defined(_di_fl_utf_string_dynamic_compare_trim_) || !defined(_di_fl_utf_string_dynamic_partial_compare_trim_)
-  extern f_status_t private_fl_utf_string_compare_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t offset1, const f_array_length_t offset2, const f_array_length_t stop1, const f_array_length_t stop2) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_utf_string_compare_trim_) || !defined(_di_fl_utf_string_dynamic_compare_trim_) || !defined(_di_fl_utf_string_dynamic_partial_compare_trim_)
-
-/**
- * Private implementation of fl_utf_string_rip(), but only the part for finding the start/stop range.
- *
- * Intended to be shared to each of the different implementation variations.
- *
- * @param source
- *   The string to rip from.
- * @param start
- *   Inclusive start point of string to rip.
- *   Will be updated to reflect the new start range.
- * @param stop
- *   Inclusive stop point of string to rip.
- *   Will be updated to reflect the new stop range.
- *
- * @return
- *   F_none on success.
- *   F_data_not on success but only white space found.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace()
- *
- * @see f_utf_character_is_whitespace()
- * @see fl_utf_string_dynamic_rip()
- * @see fl_utf_string_rip()
- */
-#if !defined(_di_fl_utf_string_rip_) || !defined(_di_fl_utf_string_dynamic_rip_) || !defined(_di_fl_utf_string_rip_nulless_) || !defined(_di_fl_utf_string_dynamic_rip_nulless_)
-  extern f_status_t private_fl_utf_string_rip_find_range(const f_utf_string_t source, f_array_length_t *start, f_array_length_t *stop) F_attribute_visibility_internal_d;
-#endif // !defined(_di_fl_utf_string_rip_) || !defined(_di_fl_utf_string_dynamic_rip_) || !defined(_di_fl_utf_string_rip_nulless_) || !defined(_di_fl_utf_string_dynamic_rip_nulless_)
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // _PRIVATE_FL_utf_h
index 2d9cf3fab185634d841dfcb9db6bdc5919af81a9..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,444 +0,0 @@
-#include "utf.h"
-#include "private-utf.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef _di_fl_utf_string_compare_
-  f_status_t fl_utf_string_compare(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
-    return private_fl_utf_string_compare(string1, string2, 0, 0, length1, length2);
-  }
-#endif // _di_fl_utf_string_compare_
-
-#ifndef _di_fl_utf_string_compare_trim_
-  f_status_t fl_utf_string_compare_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2) {
-    return private_fl_utf_string_compare_trim(string1, string2, 0, 0, length1, length2);
-  }
-#endif // _di_fl_utf_string_compare_trim_
-
-#ifndef _di_fl_utf_string_dynamic_compare_
-  f_status_t fl_utf_string_dynamic_compare(const f_utf_string_static_t string1, const f_utf_string_static_t string2) {
-    return private_fl_utf_string_compare(string1.string, string2.string, 0, 0, string1.used, string2.used);
-  }
-#endif // _di_fl_utf_string_dynamic_compare_
-
-#ifndef _di_fl_utf_string_dynamic_compare_trim_
-  f_status_t fl_utf_string_dynamic_compare_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2) {
-    return private_fl_utf_string_compare_trim(string1.string, string2.string, 0, 0, string1.used, string2.used);
-  }
-#endif // _di_fl_utf_string_dynamic_compare_trim_
-
-#ifndef _di_fl_utf_string_dynamic_partial_compare_
-  f_status_t fl_utf_string_dynamic_partial_compare(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
-    #ifndef _di_level_1_parameter_checking_
-      if (string1.used <= range1.stop) return F_status_set_error(F_parameter);
-      if (string2.used <= range2.stop) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    return private_fl_utf_string_compare(string1.string, string2.string, range1.start, range2.start, range1.stop + 1, range2.stop + 1);
-  }
-#endif // _di_fl_utf_string_dynamic_partial_compare_
-
-#ifndef _di_fl_utf_string_dynamic_partial_compare_trim_
-  f_status_t fl_utf_string_dynamic_partial_compare_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2) {
-    #ifndef _di_level_1_parameter_checking_
-      if (string1.used <= range1.stop) return F_status_set_error(F_parameter);
-      if (string2.used <= range2.stop) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    return private_fl_utf_string_compare_trim(string1.string, string2.string, range1.start, range2.start, range1.stop + 1, range2.stop + 1);
-  }
-#endif // _di_fl_utf_string_dynamic_partial_compare_trim_
-
-#ifndef _di_fl_utf_string_dynamic_rip_
-  f_status_t fl_utf_string_dynamic_rip(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (source.used <= range.start) return F_status_set_error(F_parameter);
-      if (source.used <= range.stop) return F_status_set_error(F_parameter);
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!source.used) return F_data_not;
-    if (range.start > range.stop) return F_data_not_stop;
-
-    return f_utf_string_append(source.string + range.start, (range.stop - range.start) + 1, destination);
-  }
-#endif // _di_fl_utf_string_dynamic_rip_
-
-#ifndef _di_fl_utf_string_dynamic_rip_nulless_
-  f_status_t fl_utf_string_dynamic_rip_nulless(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (source.used <= range.start) return F_status_set_error(F_parameter);
-      if (source.used <= range.stop) return F_status_set_error(F_parameter);
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!source.used) return F_data_not;
-    if (range.start > range.stop) return F_data_not_stop;
-
-    return f_utf_string_append_nulless(source.string + range.start, (range.stop - range.start) + 1, destination);
-  }
-#endif // _di_fl_utf_string_dynamic_rip_nulless_
-
-#ifndef _di_fl_utf_string_dynamic_seek_line_to_char_
-  f_status_t fl_utf_string_dynamic_seek_line_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) return F_data_not;
-    if (range->start > range->stop) return F_data_not_stop;
-
-    f_utf_char_t seek_to_character = seek_to_this << 24;
-
-    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (buffer.string[range->start] != seek_to_character) {
-
-      if (buffer.string[range->start++] == f_utf_char_eol_s) {
-        return F_none_eol;
-      }
-
-      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (range->start >= buffer.used) {
-        return F_none_eos;
-      }
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    return F_none;
-  }
-#endif // _di_fl_utf_string_dynamic_seek_line_to_char_
-
-#ifndef _di_fl_utf_string_dynamic_seek_line_until_graph_
-  f_status_t fl_utf_string_dynamic_seek_line_until_graph(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) return F_data_not;
-    if (range->start > range->stop) return F_data_not_stop;
-
-    f_status_t status = F_none;
-
-    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (buffer.string[range->start] == placeholder || (status = f_utf_character_is_graph(buffer.string[range->start])) == F_false) {
-
-      if (F_status_is_error(status)) {
-        return status;
-      }
-
-      if (buffer.string[range->start++] == f_utf_char_eol_s) {
-        return F_none_eol;
-      }
-
-      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (range->start >= buffer.used) {
-        return F_none_eos;
-      }
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    if (F_status_is_error(status)) {
-      return status;
-    }
-
-    return F_none;
-  }
-#endif // _di_fl_utf_string_dynamic_seek_line_until_graph_
-
-#ifndef _di_fl_utf_string_dynamic_seek_line_until_graph_non_
-  f_status_t fl_utf_string_dynamic_seek_line_until_graph_non(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) return F_data_not;
-    if (range->start > range->stop) return F_data_not_stop;
-
-    f_status_t status = F_none;
-
-    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (buffer.string[range->start] == placeholder || (status = f_utf_character_is_whitespace(buffer.string[range->start], F_false)) == F_false) {
-
-      if (F_status_is_error(status)) return status;
-      if (buffer.string[range->start] == f_utf_char_eol_s) return F_none_eol;
-
-      ++range->start;
-
-      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (range->start >= buffer.used) return F_none_eos;
-      if (range->start > range->stop) return F_none_stop;
-    } // while
-
-    if (F_status_is_error(status)) return status;
-
-    return F_none;
-  }
-#endif // _di_fl_utf_string_dynamic_seek_line_until_graph_non_
-
-#ifndef _di_fl_utf_string_dynamic_seek_to_char_
-  f_status_t fl_utf_string_dynamic_seek_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-      if (buffer.used <= range->start) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!buffer.used) return F_data_not;
-    if (range->start > range->stop) return F_data_not_stop;
-
-    f_utf_char_t seek_to_character = seek_to_this << 24;
-
-    if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (buffer.string[range->start] != seek_to_character) {
-
-      ++range->start;
-
-      if (macro_f_utf_char_t_width_is(buffer.string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (range->start >= buffer.used) {
-        return F_none_eos;
-      }
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    return F_none;
-  }
-#endif // _di_fl_utf_string_dynamic_seek_to_char_
-
-#ifndef _di_fl_utf_string_rip_
-  f_status_t fl_utf_string_rip(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!length) return F_data_not;
-
-    f_array_length_t begin = 0;
-    f_array_length_t end = length - 1;
-
-    f_status_t status = private_fl_utf_string_rip_find_range(source, &begin, &end);
-
-    if (F_status_is_error(status)) {
-      return status;
-    }
-
-    if (status == F_data_not) {
-      return status;
-    }
-
-    return f_utf_string_append(source + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_utf_string_rip_
-
-#ifndef _di_fl_utf_string_rip_nulless_
-  f_status_t fl_utf_string_rip_nulless(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!destination) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (!length) return F_data_not;
-
-    f_array_length_t begin = 0;
-    f_array_length_t end = length - 1;
-
-    f_status_t status = private_fl_utf_string_rip_find_range(source, &begin, &end);
-
-    if (F_status_is_error(status)) {
-      return status;
-    }
-
-    if (status == F_data_not) {
-      return status;
-    }
-
-    return f_utf_string_append_nulless(source + begin, (end - begin) + 1, destination);
-  }
-#endif // _di_fl_utf_string_rip_nulless_
-
-#ifndef _di_fl_utf_string_seek_line_to_char_
-  f_status_t fl_utf_string_seek_line_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_utf_char_t seek_to_character = seek_to_this << 24;
-
-    for (; range->start <= range->stop; ++range->start) {
-
-      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (string[range->start] == f_utf_char_eol_s) {
-        return F_none_eol;
-      }
-
-      if (string[range->start] == seek_to_character) {
-        return F_none;
-      }
-    } // for
-
-    return F_none_stop;
-  }
-#endif // _di_fl_utf_string_seek_line_to_char_
-
-#ifndef _di_fl_utf_string_seek_line_until_graph_
-  f_status_t fl_utf_string_seek_line_until_graph(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_status_t status = F_none;
-
-    if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (string[range->start] == placeholder || (status = f_utf_character_is_graph(string[range->start])) == F_false) {
-
-      if (F_status_is_error(status)) {
-        return status;
-      }
-
-      if (string[range->start++] == f_utf_char_eol_s) {
-        return F_none_eol;
-      }
-
-      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    if (F_status_is_error(status)) {
-      return status;
-    }
-
-    return F_none;
-  }
-#endif // _di_fl_utf_string_seek_line_until_graph_
-
-#ifndef _di_fl_utf_string_seek_line_until_graph_non_
-  f_status_t fl_utf_string_seek_line_until_graph_non(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    f_status_t status = F_none;
-
-    if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (string[range->start] == placeholder || (status = f_utf_character_is_graph(string[range->start])) == F_true) {
-
-      if (F_status_is_error(status)) {
-        return status;
-      }
-
-      if (string[range->start++] == f_utf_char_eol_s) {
-        return F_none_eol;
-      }
-
-      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-
-      if (range->start > range->stop) {
-        return F_none_stop;
-      }
-    } // while
-
-    if (F_status_is_error(status)) {
-      return status;
-    }
-
-    return F_none;
-  }
-#endif // _di_fl_utf_string_seek_line_until_graph_non_
-
-#ifndef _di_fl_utf_string_seek_to_char_
-  f_status_t fl_utf_string_seek_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this) {
-    #ifndef _di_level_1_parameter_checking_
-      if (!range) return F_status_set_error(F_parameter);
-    #endif // _di_level_1_parameter_checking_
-
-    if (range->start > range->stop) {
-      return F_data_not_stop;
-    }
-
-    const f_utf_char_t seek_to_character = seek_to_this << 24;
-
-    if (macro_f_utf_char_t_width_is(string[0]) == 1) {
-      return F_status_set_error(F_utf_fragment);
-    }
-
-    while (range->start <= range->stop) {
-
-      if (string[range->start++] == seek_to_character) {
-        return F_none;
-      }
-
-      if (macro_f_utf_char_t_width_is(string[range->start]) == 1) {
-        return F_status_set_error(F_utf_fragment);
-      }
-    } // while
-
-    return F_none_stop;
-  }
-#endif // _di_fl_utf_string_seek_to_utf_character_
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
index 816b03fb1b40aa00cad258969aa961743dc4dead..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391 100644 (file)
@@ -1,526 +0,0 @@
-/**
- * FLL - Level 1
- *
- * Project: Utf
- * API Version: 0.7
- * Licenses: lgpl-2.1-or-later
- *
- * Provides UTF-8 character manipulation and processing capabilities.
- *
- * UTF-8 is handled within these functions via padded string characters (f_utf_string_t).
- * Unlike f_string_t, these f_utf_string_t base functions force padding of ASCII or UTF-8 characters.
- * With f_utf_string_t, a 1-byte wide ASCII character is stored as 4 bytes and a 4-byte wide UTF-8 character is stored as 4 bytes.
- *
- * This simplifies traversing the strings at the cost of size vs f_string_t.
- *
- * Because of the set width, it is generally safe to ignore invalid UTF-8 sequences.
- * Invalid UTF-8 will be generally ignored here, where reasonably possible.
- */
-#ifndef _FL_string_h
-#define _FL_string_h
-
-// Libc includes.
-#include <ctype.h>
-#include <string.h>
-
-// FLL-0 includes.
-#include <fll/level_0/type.h>
-#include <fll/level_0/status.h>
-#include <fll/level_0/memory.h>
-#include <fll/level_0/string.h>
-#include <fll/level_0/utf.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-/**
- * Compare two UTF-8 strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   Length of string1.
- * @param length2
- *   Length of string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_utf_string_compare_
-  extern f_status_t fl_utf_string_compare(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
-#endif // _di_fl_utf_string_compare_
-
-/**
- * Compare two UTF-8 strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param length1
- *   Length of string1.
- * @param length2
- *   Length of string2.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace().
- *
- * @see f_utf_character_is_whitespace()
- */
-#ifndef _di_fl_utf_string_compare_trim_
-  extern f_status_t fl_utf_string_compare_trim(const f_utf_string_t string1, const f_utf_string_t string2, const f_array_length_t length1, const f_array_length_t length2);
-#endif // _di_fl_utf_string_compare_trim_
-
-/**
- * Compare two UTF-8 strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- */
-#ifndef _di_fl_utf_string_dynamic_compare_
-  extern f_status_t fl_utf_string_dynamic_compare(const f_utf_string_static_t string1, const f_utf_string_static_t string2);
-#endif // _di_fl_utf_string_dynamic_compare_
-
-/**
- * Compare two UTF-8 strings, similar to strncmp().
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace().
- *
- * @see f_utf_character_is_whitespace()
- */
-#ifndef _di_fl_utf_string_dynamic_compare_trim_
-  extern f_status_t fl_utf_string_dynamic_compare_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2);
-#endif // _di_fl_utf_string_dynamic_compare_trim_
-
-/**
- * Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range1
- *   A range within the string1 to restrict the comparison to.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- */
-#ifndef _di_fl_utf_string_dynamic_partial_compare_
-  extern f_status_t fl_utf_string_dynamic_partial_compare(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2);
-#endif // _di_fl_utf_string_dynamic_partial_compare_
-
-/**
- * Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
- *
- * This does not stop on NULL.
- * NULL characters are ignored.
- * Ignores leading and trailing whitespace.
- *
- * @param string1
- *   String to compare.
- * @param string2
- *   String to compare.
- * @param range1
- *   A range within the string1 to restrict the comparison to.
- * @param range2
- *   A range within the string2 to restrict the comparison to.
- *
- * @return
- *   F_equal_to when both strings equal.
- *   F_equal_to_not when both strings do not equal.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace().
- *
- * @see f_utf_character_is_whitespace()
- */
-#ifndef _di_fl_utf_string_dynamic_partial_compare_trim_
-  extern f_status_t fl_utf_string_dynamic_partial_compare_trim(const f_utf_string_static_t string1, const f_utf_string_static_t string2, const f_string_range_t range1, const f_string_range_t range2);
-#endif // _di_fl_utf_string_dynamic_partial_compare_trim_
-
-/**
- * Allocate a new UTF-8 string from the provided range in the buffer.
- *
- * Ignores leading and trailing whitespace.
- * As a result, resulting size may be smaller than requested range.
- *
- * @param source
- *   The buffer to rip from.
- * @param range
- *   A range within the buffer representing the string to rip.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not if source length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_string_append().
- *
- * @see f_utf_string_append()
- */
-#ifndef _di_fl_utf_string_dynamic_rip_
-  extern f_status_t fl_utf_string_dynamic_rip(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination);
-#endif // _di_fl_utf_string_dynamic_rip_
-
-/**
- * Allocate a new UTF-8 string from the provided range in the buffer.
- *
- * Ignores leading and trailing whitespace.
- * As a result, resulting size may be smaller than requested range.
- *
- * Skips over NULL characters from source when appending.
- *
- * @param source
- *   The string to rip from.
- * @param range
- *   A range within the buffer representing the string to rip.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not if source length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *
- *   Errors (with error bit) from: f_utf_string_append_nulless().
- *
- * @see f_utf_string_append_nulless()
- */
-#ifndef _di_fl_utf_string_dynamic_rip_nulless_
-  extern f_status_t fl_utf_string_dynamic_rip_nulless(const f_utf_string_static_t source, const f_string_range_t range, f_utf_string_dynamic_t * const destination);
-#endif // _di_fl_utf_string_dynamic_rip_nulless_
-
-/**
- * Seek the buffer location forward until the  (1-byte wide) character or EOL is reached.
- *
- * @param buffer
- *   The buffer to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- * @param seek_to_this
- *   A single-width character.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_eos on success, but stopped at end of buffer.
- *   F_data_not if buffer length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- */
-#ifndef _di_fl_utf_string_dynamic_seek_line_to_char_
-  extern f_status_t fl_utf_string_dynamic_seek_line_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this);
-#endif // _di_fl_utf_string_dynamic_seek_line_to_char_
-
-/**
- * Increment buffer location until a graph character or an EOL is matched.
- *
- * @param buffer
- *   The buffer to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- * @param placeholder
- *   A UTF-8 character representing a placeholder to ignore (may be NULL).
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_eos on success, but stopped at end of buffer.
- *   F_data_not if buffer length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_graph().
- *
- * @see f_utf_character_is_graph()
- */
-#ifndef _di_fl_utf_string_dynamic_seek_line_until_graph_
-  extern f_status_t fl_utf_string_dynamic_seek_line_until_graph(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder);
-#endif // _di_fl_utf_string_dynamic_seek_line_until_graph_
-
-/**
- * Increment buffer location until a non-graph character or an EOL is matched.
- *
- * @param buffer
- *   The buffer to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- * @param placeholder
- *   A single-width character representing a placeholder to ignore (may be NULL).
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_eos on success, but stopped at end of buffer.
- *   F_none_stop on success, but stopped stop location.
- *   F_data_not if buffer length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_graph().
- *
- * @see f_utf_character_is_graph()
- */
-#ifndef _di_fl_utf_string_dynamic_seek_line_until_graph_non_
-  extern f_status_t fl_utf_string_dynamic_seek_line_until_graph_non(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_utf_char_t placeholder);
-#endif // _di_fl_utf_string_dynamic_seek_line_until_graph_non_
-
-/**
- * Seek the buffer location forward until the UTF-8 character (1-byte wide) is reached.
- *
- * @param buffer
- *   The buffer to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- * @param seek_to_this
- *   A single-width non-UTF-8 character.
- *
- * @return
- *   F_none on success.
- *   F_none_eos on success, but stopped at end of buffer.
- *   F_none_stop on success, but stopped stop location.
- *   F_data_not if buffer length is 0.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- */
-#ifndef _di_fl_utf_string_dynamic_seek_to_char_
-  extern f_status_t fl_utf_string_dynamic_seek_to_char(const f_utf_string_static_t buffer, f_string_range_t * const range, const f_char_t seek_to_this);
-#endif // _di_fl_utf_string_dynamic_seek_to_char_
-
-/**
- * Allocate a new UTF-8 string from the provided range in the string.
- *
- * Ignores leading and trailing whitespace.
- * As a result, resulting size may be smaller than requested length.
- *
- * @param source
- *   The string to rip from.
- * @param length
- *   The length of source to append.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not if source length is 0.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace().
- *
- * @see f_utf_character_is_whitespace()
- */
-#ifndef _di_fl_utf_string_rip_
-  extern f_status_t fl_utf_string_rip(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination);
-#endif // _di_fl_utf_string_rip_
-
-/**
- * Allocate a new UTF-8 string from the provided range in the string.
- *
- * Ignores leading and trailing whitespace.
- * As a result, resulting size may be smaller than requested length.
- *
- * Skips over NULL characters from source when ripping.
- *
- * @param source
- *   The string to rip from.
- * @param length
- *   The length of source to append.
- * @param destination
- *   The new string, which will be allocated or reallocated as necessary.
- *
- * @return
- *   F_none on success.
- *   F_data_not if source length is 0.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_whitespace().
- *
- * @see f_utf_character_is_whitespace()
- */
-#ifndef _di_fl_utf_string_rip_nulless_
-  extern f_status_t fl_utf_string_rip_nulless(const f_utf_string_t source, const f_array_length_t length, f_utf_string_dynamic_t * const destination);
-#endif // _di_fl_utf_string_rip_nulless_
-
-/**
- * Seek the string location forward until the 1-byte wide character or EOL is reached.
- *
- * @param string
- *   The string to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- * @param seek_to_this
- *   A single-width character.
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_eos on success, but stopped at end of buffer.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- */
-#ifndef _di_fl_utf_string_seek_line_to_char_
-  extern f_status_t fl_utf_string_seek_line_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this);
-#endif // _di_fl_utf_string_seek_line_to_char_
-
-/**
- * Increment string location until a UTF-8 graph character or an EOL is matched.
- *
- * @param string
- *   The string to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- * @param placeholder
- *   A UTF-8 character representing a placeholder to ignore (may be NULL).
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_graph().
- *
- * @see f_utf_character_is_graph()
- */
-#ifndef _di_fl_utf_string_seek_line_until_graph_
-  extern f_status_t fl_utf_string_seek_line_until_graph(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder);
-#endif // _di_fl_utf_string_seek_line_until_graph_
-
-/**
- * Increment string location until a non-graph UTF-8 character or an EOL is matched.
- *
- * @param string
- *   The string to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- * @param placeholder
- *   A UTF-8 character representing a placeholder to ignore (may be NULL).
- *
- * @return
- *   F_none on success.
- *   F_none_eol on success, but stopped at EOL.
- *   F_none_stop on success, but stopped stop location.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- *
- *   Errors (with error bit) from: f_utf_character_is_graph().
- *
- * @see f_utf_character_is_graph()
- */
-#ifndef _di_fl_utf_string_seek_line_until_graph_non_
-  extern f_status_t fl_utf_string_seek_line_until_graph_non(const f_utf_string_t string, f_string_range_t * const range, const f_utf_char_t placeholder);
-#endif // _di_fl_utf_string_seek_line_until_graph_non_
-
-/**
- * Seek the string location forward until the UTF-8 character (up to 4-byte wide) is reached.
- *
- * @param string
- *   The string to traverse.
- * @param range
- *   A range within the buffer representing the start and stop locations.
- *   The start location will be incremented by seek.
- * @param seek_to_this
- *   A single-width non-UTF-8 character.
- *
- * @return
- *   F_none on success.
- *   F_none_eos on success, but stopped at end of buffer.
- *   F_none_stop on success, but stopped stop location.
- *   F_data_not_stop if range.start > range.stop.
- *
- *   F_parameter (with error bit) if a parameter is invalid.
- *   F_utf_fragment (with error bit) if character is a UTF-8 fragment.
- */
-#ifndef _di_fl_utf_string_seek_to_character_
-  extern f_status_t fl_utf_string_seek_to_char(const f_utf_string_t string, f_string_range_t * const range, const f_char_t seek_to_this);
-#endif // _di_fl_utf_string__seek_to_character_
-
-#ifdef __cplusplus
-} // extern "C"
-#endif
-
-#endif // _FL_string_h
index 244dcbc44500872afc78b3a6c5789da5c7f352da..2af273b13063c3e85529b1d0b292145675ba467f 100644 (file)
@@ -51,7 +51,6 @@
 #include <fll/level_1/control_group.h>
 #include <fll/level_1/environment.h>
 #include <fll/level_1/execute.h>
-#include <fll/level_1/string.h>
 
 #ifdef __cplusplus
 extern "C" {
index 3d8727408cd6a0d217f600258c4ea83f828dc41c..14ea1c5937c6fb9f871357fba628f4e8b94201fa 100644 (file)
@@ -115,7 +115,7 @@ extern "C" {
       }
 
       if (F_status_is_error_not(status)) {
-        status = fl_string_dynamic_partial_fll_identify(buffer, range, ids ? &ids->array[ids->used] : &id);
+        status = f_parse_dynamic_partial_fll_identify(buffer, range, ids ? &ids->array[ids->used] : &id);
       }
 
       if (F_status_is_error(status) || (status == F_found_not && !found_fss)) {
@@ -191,7 +191,7 @@ extern "C" {
 
         if (matched[j]) continue;
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -240,7 +240,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
         if (F_status_is_error(status)) return status;
 
         if (status == F_equal_to_not) continue;
@@ -312,7 +312,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -329,7 +329,7 @@ extern "C" {
 
         for (k = 0; k < values[j]->used; ++k) {
 
-          status = fl_string_dynamic_partial_compare_trim_string(values[j]->array[k].name.string, buffer, values[j]->array[k].name.used, contents.array[i].array[0]);
+          status = f_compare_dynamic_partial_trim_string(values[j]->array[k].name.string, buffer, values[j]->array[k].name.used, contents.array[i].array[0]);
 
           if (F_status_is_error(status)) {
             f_string_dynamic_resize(0, &name);
@@ -452,7 +452,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -526,7 +526,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -598,7 +598,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -619,7 +619,7 @@ extern "C" {
 
         for (k = 0; k < values[j]->used; ++k) {
 
-          status = fl_string_dynamic_partial_compare_trim_string(values[j]->array[k].name.string, buffer, values[j]->array[k].name.used, contents.array[i].array[0]);
+          status = f_compare_dynamic_partial_trim_string(values[j]->array[k].name.string, buffer, values[j]->array[k].name.used, contents.array[i].array[0]);
 
           if (F_status_is_error(status)) {
             f_string_dynamic_resize(0, &name);
@@ -715,7 +715,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -736,7 +736,7 @@ extern "C" {
 
         for (k = 0; k < values[j]->used; ++k) {
 
-          status = fl_string_dynamic_partial_compare_trim_string(values[j]->array[k].name.string, buffer, values[j]->array[k].name.used, contents.array[i].array[0]);
+          status = f_compare_dynamic_partial_trim_string(values[j]->array[k].name.string, buffer, values[j]->array[k].name.used, contents.array[i].array[0]);
 
           if (F_status_is_error(status)) {
             f_string_dynamic_resize(0, &name);
@@ -828,7 +828,7 @@ extern "C" {
 
         if (matched[j]) continue;
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -877,7 +877,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
@@ -935,7 +935,7 @@ extern "C" {
 
       for (j = 0; j < size; ++j) {
 
-        status = fl_string_dynamic_partial_compare_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
+        status = f_compare_dynamic_partial_trim_string(names[j].string, buffer, names[j].used, objects.array[i]);
 
         if (F_status_is_error(status)) return status;
         if (status == F_equal_to_not) continue;
index dcf90718a0bc1fefc91eec968a421e033a06e350..7adebc7dc7e683c056511f48b613ecef9073b0db 100644 (file)
 #include <fll/level_0/memory.h>
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/fss.h>
+#include <fll/level_0/parse.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss.h>
-#include <fll/level_1/string.h>
 
 #ifdef __cplusplus
 extern "C" {
@@ -37,7 +38,7 @@ extern "C" {
  * This expects there to be at least a single "fss-XXXX" FSS Identifier.
  * If one is not found but the line contains valid FLL Identifiers, then this returns F_maybe.
  *
- * See the fl_string_dynamic_partial_fll_identify() function for details on individual FLL/FSS Identifier processing.
+ * See the f_parse_dynamic_partial_fll_identify() function for details on individual FLL/FSS Identifier processing.
  *
  * @param buffer
  *   The string to process.
@@ -65,11 +66,11 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_fll_ids_increase().
  *   Errors (with error bit) from: f_utf_is_whitespace().
- *   Errors (with error bit) from: fl_string_dynamic_partial_fll_identify().
+ *   Errors (with error bit) from: f_parse_dynamic_partial_fll_identify().
  *
  * @see f_fll_ids_increase()
  * @see f_utf_is_whitespace()
- * @see fl_string_dynamic_partial_fll_identify()
+ * @see f_parse_dynamic_partial_fll_identify()
  */
 #ifndef _di_fll_fss_identify_
   extern f_status_t fll_fss_identify(const f_string_static_t buffer, f_string_range_t * const range, f_fll_ids_t * const ids);
@@ -112,10 +113,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_append_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_
   extern f_status_t fll_fss_snatch(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, f_string_dynamic_t * const values[], bool matches[], f_array_length_t * const indexs[]);
@@ -160,10 +161,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_append_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_apart_
   extern f_status_t fll_fss_snatch_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, f_string_dynamics_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -210,10 +211,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_append_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_
   extern f_status_t fll_fss_snatch_map(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, f_string_maps_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -262,10 +263,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_append_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_apart_
   extern f_status_t fll_fss_snatch_map_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, f_string_map_multis_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -315,7 +316,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_mash_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  */
 #ifndef _di_fll_fss_snatch_map_mash_
   extern f_status_t fll_fss_snatch_map_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, const f_string_static_t glue, f_string_maps_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -366,10 +367,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_mash_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_mash_apart_
   extern f_status_t fll_fss_snatch_map_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, const f_string_static_t glue, f_string_map_multis_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -419,10 +420,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_mash_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_map_together_
   extern f_status_t fll_fss_snatch_map_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, const f_string_static_t glue, f_string_maps_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -469,7 +470,7 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_mash_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  */
 #ifndef _di_fll_fss_snatch_mash_
   extern f_status_t fll_fss_snatch_mash(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, const f_string_static_t glue, f_string_dynamic_t * const values[], bool matches[], f_array_length_t * const indexs[]);
@@ -517,10 +518,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_mash_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_mash_apart_
   extern f_status_t fll_fss_snatch_mash_apart(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, const f_string_static_t glue, f_string_dynamics_t * const values[], bool matches[], f_array_lengths_t * const indexs[]);
@@ -565,10 +566,10 @@ extern "C" {
  *   F_parameter (with error bit) if a parameter is invalid.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_mash_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_compare_trim_string().
+ *   Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
  *
  * @see f_string_dynamic_partial_append_nulless()
- * @see fl_string_compare_trim()
+ * @see f_compare_trim()
  */
 #ifndef _di_fll_fss_snatch_together_
   extern f_status_t fll_fss_snatch_together(const f_string_static_t buffer, const f_fss_objects_t objects, const f_fss_contents_t contents, const f_string_static_t names[], const f_array_length_t size, const f_string_static_t glue, f_string_dynamic_t * const values[], bool matches[], f_array_length_t * const indexs[]);
index 488c26ab1543b3c6a7506ff6db83772b375f25a6..8d9c9274036896c479ff88cbc084b8b0c4d5e07b 100644 (file)
@@ -21,7 +21,6 @@
 // FLL-1 includes.
 #include <fll/level_1/fss.h>
 #include <fll/level_1/fss/basic.h>
-#include <fll/level_1/string.h>
 
 #ifdef __cplusplus
 extern "C" {
index 5b2370d8b01429fedadcf6d275feb7e1b85e1c50..e07594f3e6f1c5688a50834504f3b822e9490f0b 100644 (file)
@@ -21,7 +21,6 @@
 // FLL-1 includes.
 #include <fll/level_1/fss.h>
 #include <fll/level_1/fss/basic_list.h>
-#include <fll/level_1/string.h>
 
 #ifdef __cplusplus
 extern "C" {
index 0f11149e1de4a62cd81d88cadb73ce9a8685ac07..dddd14d5b60284d135b01148b33a339e6a69802d 100644 (file)
@@ -36,7 +36,7 @@ extern "C" {
 
         if (range->start >= range->stop || range->start >= buffer.used) {
           if (state->status == F_fss_found_object || state->status == F_fss_found_object_content_not) {
-            if (fl_string_dynamic_partial_compare_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
               state->status = F_fss_found_object_content_not;
             }
 
@@ -75,7 +75,7 @@ extern "C" {
 
           contents->array[contents->used].used = 0;
 
-          if (fl_string_dynamic_partial_compare_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
             status = f_string_ranges_increase(state->step_small, &contents->array[contents->used]);
 
             if (F_status_is_error(status)) {
@@ -123,7 +123,7 @@ extern "C" {
 
           contents->array[contents->used].used = 0;
 
-          if (fl_string_dynamic_partial_compare_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(f_fss_payload_s.string, buffer, f_fss_payload_s.used, objects->array[objects->used]) == F_equal_to) {
             ++objects->used;
 
             status = f_string_ranges_increase(state->step_small, &contents->array[contents->used]);
@@ -232,7 +232,7 @@ extern "C" {
     }
 
     if (state->status == F_none || state->status == F_none_stop || state->status == F_none_eos || state->status == F_none_eol) {
-      if (fl_string_dynamic_compare(f_fss_payload_s, object) == F_equal_to) {
+      if (f_compare_dynamic(f_fss_payload_s, object) == F_equal_to) {
         state->status = f_string_dynamic_increase_by(content.used, destination);
         if (F_status_is_error(state->status)) return;
 
index 03e2b38ebb674181b357336ff966976462c9addf..48b59d44c0eec20827d9e450b5b6c767760e4c9e 100644 (file)
 #include <fll/level_0/memory.h>
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/fss.h>
 
 // FLL-1 includes.
 #include <fll/level_1/fss.h>
 #include <fll/level_1/fss/basic_list.h>
-#include <fll/level_1/string.h>
 
 #ifdef __cplusplus
 extern "C" {
index d30f4e0058256a5faa3d98de8636f4fc2dcd71fc..5c3ab192f577558b47bf1eb12a6a02efd7c4b74f 100644 (file)
@@ -5,10 +5,11 @@ f_status
 f_memory
 f_string
 f_utf
+f_compare
 f_conversion
 f_fss
 f_file
+f_parse
 f_status_string
 fl_conversion
 fl_fss
-fl_string
index 168c4b7d8e4cabca31bcd6989b6db68a88e3dfbe..6f4af1a828eaebfb3f9b714477e1518313b87f42 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfl_conversion -lfl_fss -lfl_string -lf_conversion -lf_file -lf_fss -lf_memory -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfl_conversion -lfl_fss -lf_compare -lf_conversion -lf_file -lf_fss -lf_parse -lf_memory -lf_status_string -lf_string -lf_type_array -lf_utf
 
 build_sources_library fss.c fss/basic.c fss/basic_list.c fss/embedded_list.c fss/extended.c fss/extended_list.c fss/payload.c
 
index 8db8904c3b7d1599d7c93332771a0af1d6382a85..d882ff3bec7c55b9a74690791340094575bfac4d 100644 (file)
@@ -55,13 +55,13 @@ extern "C" {
     }
 
     #ifndef _di_fll_fss_status_error_
-      if (fl_string_dynamic_compare(name, fll_fss_status_format_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_format_s) == F_equal_to) {
         *code = F_fss_format;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, fll_fss_status_format_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_format_eos_s) == F_equal_to) {
         *code = F_fss_format_eos;
 
         return F_none;
@@ -69,13 +69,13 @@ extern "C" {
     #endif // _di_fll_fss_status_error_
 
     #ifndef _di_fll_fss_status_warning_
-      if (fl_string_dynamic_compare(name, fll_fss_status_accepted_invalid_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_accepted_invalid_s) == F_equal_to) {
         *code = F_fss_accepted_invalid;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, fll_fss_status_accepted_invalid_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_accepted_invalid_eos_s) == F_equal_to) {
         *code = F_fss_accepted_invalid_eos;
 
         return F_none;
@@ -83,31 +83,31 @@ extern "C" {
     #endif // _di_fll_fss_status_warning_
 
     #ifndef _di_fll_fss_status_success_
-      if (fl_string_dynamic_compare(name, fll_fss_status_found_object_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_found_object_s) == F_equal_to) {
         *code = F_fss_found_object;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, fll_fss_status_found_content_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_found_content_s) == F_equal_to) {
         *code = F_fss_found_content;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, fll_fss_status_found_object_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_found_object_not_s) == F_equal_to) {
         *code = F_fss_found_object_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, fll_fss_status_found_content_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_found_content_not_s) == F_equal_to) {
         *code = F_fss_found_content_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, fll_fss_status_found_object_content_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_found_object_content_not_s) == F_equal_to) {
         *code = F_fss_found_object_content_not;
 
         return F_none;
@@ -115,20 +115,20 @@ extern "C" {
     #endif // _di_fll_fss_status_success_
 
     #ifndef _di_fll_fss_status_codes_
-      if (fl_string_dynamic_compare(name, fll_fss_status_found_comment_s) == F_equal_to) {
+      if (f_compare_dynamic(name, fll_fss_status_found_comment_s) == F_equal_to) {
         *code = F_fss_found_object;
 
         return F_none;
       }
     #endif // _di_fll_fss_status_codes_
 
-    if (fl_string_dynamic_compare(name, fll_fss_status_status_code_first_s) == F_equal_to) {
+    if (f_compare_dynamic(name, fll_fss_status_status_code_first_s) == F_equal_to) {
       *code = F_fss_status_code_first;
 
       return F_none;
     }
 
-    if (fl_string_dynamic_compare(name, fll_fss_status_status_code_last_s) == F_equal_to) {
+    if (f_compare_dynamic(name, fll_fss_status_status_code_last_s) == F_equal_to) {
       *code = F_fss_status_code_last;
 
       return F_none;
index 28402ac94cd1ef8651fa8cc1d4d2723085c14dc3..99cc815f3def7e5404ec26b8cc74f884bbf7e9f3 100644 (file)
 #include <fll/level_0/memory.h>
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/fss.h>
+#include <fll/level_0/parse.h>
 #include <fll/level_0/status_string.h>
 
-// FLL-1 includes.
-#include <fll/level_1/string.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif
index 377335fb6e1b7afd34b2afa0999f0ddba41d93a0..3b80ae10d0a43571497a93611b5b2a6d12bb4a62 100644 (file)
@@ -5,7 +5,8 @@ f_status
 f_memory
 f_string
 f_utf
+f_compare
 f_conversion
 f_fss
+f_parse
 f_status_string
-fl_string
index 56db0c0a4d9c65048a49fc32e94a674a3093ad5a..f0b56ed5a3a91f1e7d33b8183be20fe8c174d4f2 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfl_string -lf_conversion -lf_fss -lf_memory -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lf_compare -lf_conversion -lf_fss -lf_parse -lf_memory -lf_status_string -lf_string -lf_type_array -lf_utf
 
 build_sources_library fss_status_string.c
 
index 9b2d0ed77d8979c1d1bf665bb0ce6698cc83b52c..f3529e9acccc7bd2d53d6099b47493b1f973877f 100644 (file)
@@ -28,7 +28,6 @@
 
 // FLL-1 includes.
 #include <fll/level_1/iki.h>
-#include <fll/level_1/string.h>
 
 #ifdef __cplusplus
 extern "C" {
index 21b522016bc87896402a6c732c3dfdd2482017c7..414fe22bd6970e8810c505e2183a6549f8da8af2 100644 (file)
@@ -189,7 +189,7 @@ extern "C" {
 
         destination->array[destination->used].used = 0;
 
-        status = fl_string_dynamic_rip(arguments[values.array[i]], &destination->array[destination->used]);
+        status = f_rip_dynamic(arguments[values.array[i]], &destination->array[destination->used]);
         if (F_status_is_error(status)) break;
 
         if (status == F_data_not) {
@@ -224,7 +224,7 @@ extern "C" {
       if (arguments[values.array[i]].used) {
         ripped.used = 0;
 
-        status = fl_string_dynamic_rip(arguments[values.array[i]], &ripped);
+        status = f_rip_dynamic(arguments[values.array[i]], &ripped);
         if (F_status_is_error(status)) break;
 
         if (ripped.used) {
index 34973dcc1ecb2fd05808e0365c973e25ecbd1de3..46c15a39969c3771ea9bab12600e9b16566e0e97 100644 (file)
 #include <fll/level_0/console.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
-#include <fll/level_1/string.h>
 #include <fll/level_1/print.h>
 
 // FLL-2 program includes.
@@ -206,9 +206,9 @@ extern "C" {
  *   F_memory_not (with error bit) on out of memory.
  *   F_parameter (with error bit) if a parameter is invalid.
  *
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  */
 #ifndef _di_fll_program_parameter_additional_rip_
   extern f_status_t fll_program_parameter_additional_rip(const f_string_static_t * const arguments, const f_array_lengths_t values, f_string_dynamics_t * const destination);
@@ -238,10 +238,10 @@ extern "C" {
  *   F_string_too_large (with error bit) if the combined string is too large.
  *
  *   Errors (with error bit) from: f_string_dynamic_mash().
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
  * @see f_string_dynamic_mash()
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  */
 #ifndef _di_fll_program_parameter_additional_rip_mash_
   extern f_status_t fll_program_parameter_additional_rip_mash(const f_string_static_t glue, const f_string_static_t *arguments, const f_array_lengths_t values, f_string_dynamic_t * const destination);
index 9659de37dafe605a1c31ade350afd84063146c58..1bd4bc2bf03fa41087de44140a2877f548cb156a 100644 (file)
@@ -9,6 +9,6 @@ f_color
 f_console
 f_file
 f_print
+f_rip
 f_signal
-fl_string
 fl_print
index 081fa82ae994e4b5d04312b8a4924c54a4ab377e..3b7ab0313d23fcf03baaadeacfe8d56e2f5612a8 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 
 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_libraries-individual -lfl_print -lf_color -lf_console -lf_conversion -lf_file -lf_rip -lf_memory -lf_print -lf_signal -lf_string -lf_type_array -lf_utf
 
 build_sources_library program.c program/common.c program/print.c private-program.c
 
index 29c64158bec64df1b5a121cc06115e1b224ae878..56f6f32e1c994daf7ff4c2a63d7d8583ec42b3e9 100644 (file)
@@ -26,13 +26,13 @@ extern "C" {
     }
 
     #ifndef _di_f_status_boolean_s_
-      if (fl_string_dynamic_compare(name, f_status_false_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_false_s) == F_equal_to) {
         *code = F_false;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_true_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_true_s) == F_equal_to) {
         *code = F_true;
 
         return F_none;
@@ -40,385 +40,385 @@ extern "C" {
     #endif // _di_f_status_boolean_s_
 
     #ifndef _di_f_status_signal_s_
-      if (fl_string_dynamic_compare(name, f_status_signal_hangup_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_hangup_s) == F_equal_to) {
         *code = F_signal_hangup;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_interrupt_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_interrupt_s) == F_equal_to) {
         *code = F_signal_interrupt;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_quit_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_quit_s) == F_equal_to) {
         *code = F_signal_quit;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_illegal_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_illegal_s) == F_equal_to) {
         *code = F_signal_illegal;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_trap_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_trap_s) == F_equal_to) {
         *code = F_signal_trap;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_abort_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_abort_s) == F_equal_to) {
         *code = F_signal_abort;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_bus_error_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_bus_error_s) == F_equal_to) {
         *code = F_signal_bus_error;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_floating_point_error_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_floating_point_error_s) == F_equal_to) {
         *code = F_signal_floating_point_error;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_kill_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_kill_s) == F_equal_to) {
         *code = F_signal_kill;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_user_1_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_user_1_s) == F_equal_to) {
         *code = F_signal_user_1;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_segmentation_fault_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_segmentation_fault_s) == F_equal_to) {
         *code = F_signal_segmentation_fault;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_user_2_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_user_2_s) == F_equal_to) {
         *code = F_signal_user_2;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_broken_pipe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_broken_pipe_s) == F_equal_to) {
         *code = F_signal_broken_pipe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_alarm_clock_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_alarm_clock_s) == F_equal_to) {
         *code = F_signal_alarm_clock;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_termination_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_termination_s) == F_equal_to) {
         *code = F_signal_termination;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_stack_fault_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_stack_fault_s) == F_equal_to) {
         *code = F_signal_stack_fault;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_child_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_child_s) == F_equal_to) {
         *code = F_signal_child;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_continue_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_continue_s) == F_equal_to) {
         *code = F_signal_continue;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_stop_s) == F_equal_to) {
         *code = F_signal_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_keyboard_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_keyboard_stop_s) == F_equal_to) {
         *code = F_signal_keyboard_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_tty_in_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_tty_in_s) == F_equal_to) {
         *code = F_signal_tty_in;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_tty_out_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_tty_out_s) == F_equal_to) {
         *code = F_signal_tty_out;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_urgent_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_urgent_s) == F_equal_to) {
         *code = F_signal_urgent;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_cpu_limit_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_cpu_limit_s) == F_equal_to) {
         *code = F_signal_cpu_limit;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_file_size_limit_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_file_size_limit_s) == F_equal_to) {
         *code = F_signal_file_size_limit;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_virtual_alarm_clock_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_virtual_alarm_clock_s) == F_equal_to) {
         *code = F_signal_virtual_alarm_clock;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_profile_alarm_clock_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_profile_alarm_clock_s) == F_equal_to) {
         *code = F_signal_profile_alarm_clock;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_window_size_change_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_window_size_change_s) == F_equal_to) {
         *code = F_signal_window_size_change;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_pollable_event_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_pollable_event_s) == F_equal_to) {
         *code = F_signal_pollable_event;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_power_failure_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_power_failure_s) == F_equal_to) {
         *code = F_signal_power_failure;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_bad_system_call_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_bad_system_call_s) == F_equal_to) {
         *code = F_signal_bad_system_call;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_32_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_32_s) == F_equal_to) {
         *code = F_signal_reserved_32;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_33_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_33_s) == F_equal_to) {
         *code = F_signal_reserved_33;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_34_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_34_s) == F_equal_to) {
         *code = F_signal_reserved_34;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_35_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_35_s) == F_equal_to) {
         *code = F_signal_reserved_35;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_36_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_36_s) == F_equal_to) {
         *code = F_signal_reserved_36;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_37_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_37_s) == F_equal_to) {
         *code = F_signal_reserved_37;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_38_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_38_s) == F_equal_to) {
         *code = F_signal_reserved_38;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_39_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_39_s) == F_equal_to) {
         *code = F_signal_reserved_39;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_40_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_40_s) == F_equal_to) {
         *code = F_signal_reserved_40;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_41_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_41_s) == F_equal_to) {
         *code = F_signal_reserved_41;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_42_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_42_s) == F_equal_to) {
         *code = F_signal_reserved_42;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_43_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_43_s) == F_equal_to) {
         *code = F_signal_reserved_43;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_44_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_44_s) == F_equal_to) {
         *code = F_signal_reserved_44;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_45_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_45_s) == F_equal_to) {
         *code = F_signal_reserved_45;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_46_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_46_s) == F_equal_to) {
         *code = F_signal_reserved_46;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_47_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_47_s) == F_equal_to) {
         *code = F_signal_reserved_47;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_48_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_48_s) == F_equal_to) {
         *code = F_signal_reserved_48;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_49_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_49_s) == F_equal_to) {
         *code = F_signal_reserved_49;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_50_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_50_s) == F_equal_to) {
         *code = F_signal_reserved_50;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_51_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_51_s) == F_equal_to) {
         *code = F_signal_reserved_51;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_52_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_52_s) == F_equal_to) {
         *code = F_signal_reserved_52;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_53_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_53_s) == F_equal_to) {
         *code = F_signal_reserved_53;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_54_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_54_s) == F_equal_to) {
         *code = F_signal_reserved_54;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_55_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_55_s) == F_equal_to) {
         *code = F_signal_reserved_55;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_56_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_56_s) == F_equal_to) {
         *code = F_signal_reserved_56;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_57_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_57_s) == F_equal_to) {
         *code = F_signal_reserved_57;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_58_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_58_s) == F_equal_to) {
         *code = F_signal_reserved_58;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_59_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_59_s) == F_equal_to) {
         *code = F_signal_reserved_59;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_60_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_60_s) == F_equal_to) {
         *code = F_signal_reserved_60;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_61_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_61_s) == F_equal_to) {
         *code = F_signal_reserved_61;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_62_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_62_s) == F_equal_to) {
         *code = F_signal_reserved_62;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_63_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_63_s) == F_equal_to) {
         *code = F_signal_reserved_63;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_reserved_64_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_reserved_64_s) == F_equal_to) {
         *code = F_signal_reserved_64;
 
         return F_none;
@@ -426,1843 +426,1843 @@ extern "C" {
     #endif // _di_f_status_signal_s_
 
     #ifndef _di_f_status_basic_s_
-      if (fl_string_dynamic_compare(name, f_status_none_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_s) == F_equal_to) {
         *code = F_none;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_abort_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_abort_s) == F_equal_to) {
         *code = F_abort;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_abort_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_abort_not_s) == F_equal_to) {
         *code = F_abort_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_absolute_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_absolute_s) == F_equal_to) {
         *code = F_absolute;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_absolute_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_absolute_not_s) == F_equal_to) {
         *code = F_absolute_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_address_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_address_s) == F_equal_to) {
         *code = F_address;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_address_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_address_not_s) == F_equal_to) {
         *code = F_address_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_ascii_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_ascii_s) == F_equal_to) {
         *code = F_ascii;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_ascii_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_ascii_not_s) == F_equal_to) {
         *code = F_ascii_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_atomic_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_atomic_s) == F_equal_to) {
         *code = F_atomic;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_atomic_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_atomic_not_s) == F_equal_to) {
         *code = F_atomic_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_base_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_base_s) == F_equal_to) {
         *code = F_base;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_base_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_base_not_s) == F_equal_to) {
         *code = F_base_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_begin_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_begin_s) == F_equal_to) {
         *code = F_begin;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_begin_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_begin_not_s) == F_equal_to) {
         *code = F_begin_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_block_s) == F_equal_to) {
         *code = F_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_block_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_block_not_s) == F_equal_to) {
         *code = F_block_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_body_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_body_s) == F_equal_to) {
         *code = F_body;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_body_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_body_not_s) == F_equal_to) {
         *code = F_body_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_bottom_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_bottom_s) == F_equal_to) {
         *code = F_bottom;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_bottom_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_bottom_not_s) == F_equal_to) {
         *code = F_bottom_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_bound_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_bound_s) == F_equal_to) {
         *code = F_bound;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_bound_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_bound_not_s) == F_equal_to) {
         *code = F_bound_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_break_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_break_s) == F_equal_to) {
         *code = F_break;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_break_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_break_not_s) == F_equal_to) {
         *code = F_break_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_call_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_call_s) == F_equal_to) {
         *code = F_call;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_call_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_call_not_s) == F_equal_to) {
         *code = F_call_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_capability_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_capability_s) == F_equal_to) {
         *code = F_capability;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_capability_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_capability_not_s) == F_equal_to) {
         *code = F_capability_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_child_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_child_s) == F_equal_to) {
         *code = F_child;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_character_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_character_s) == F_equal_to) {
         *code = F_character;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_character_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_character_not_s) == F_equal_to) {
         *code = F_character_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_child_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_child_not_s) == F_equal_to) {
         *code = F_child_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_s) == F_equal_to) {
         *code = F_complete;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_s) == F_equal_to) {
         *code = F_complete_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_connect_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_connect_s) == F_equal_to) {
         *code = F_connect;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_connect_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_connect_not_s) == F_equal_to) {
         *code = F_connect_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_connect_refuse_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_connect_refuse_s) == F_equal_to) {
         *code = F_connect_refuse;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_connect_reset_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_connect_reset_s) == F_equal_to) {
         *code = F_connect_reset;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_container_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_container_s) == F_equal_to) {
         *code = F_container;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_container_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_container_not_s) == F_equal_to) {
         *code = F_container_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_content_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_content_s) == F_equal_to) {
         *code = F_content;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_content_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_content_not_s) == F_equal_to) {
         *code = F_content_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_continue_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_continue_s) == F_equal_to) {
         *code = F_continue;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_continue_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_continue_not_s) == F_equal_to) {
         *code = F_continue_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_control_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_control_s) == F_equal_to) {
         *code = F_control;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_control_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_control_not_s) == F_equal_to) {
         *code = F_control_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_control_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_control_group_s) == F_equal_to) {
         *code = F_control_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_control_group_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_control_group_not_s) == F_equal_to) {
         *code = F_control_group_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_critical_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_critical_s) == F_equal_to) {
         *code = F_critical;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_critical_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_critical_not_s) == F_equal_to) {
         *code = F_critical_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_dead_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_dead_s) == F_equal_to) {
         *code = F_dead;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_dead_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_dead_not_s) == F_equal_to) {
         *code = F_dead_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_deadlock_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_deadlock_s) == F_equal_to) {
         *code = F_deadlock;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_deadlock_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_deadlock_not_s) == F_equal_to) {
         *code = F_deadlock_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_descriptor_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_descriptor_s) == F_equal_to) {
         *code = F_descriptor;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_descriptor_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_descriptor_not_s) == F_equal_to) {
         *code = F_descriptor_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_desire_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_desire_s) == F_equal_to) {
         *code = F_desire;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_desire_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_desire_not_s) == F_equal_to) {
         *code = F_desire_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_device_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_device_s) == F_equal_to) {
         *code = F_device;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_device_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_device_not_s) == F_equal_to) {
         *code = F_device_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_disable_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_disable_s) == F_equal_to) {
         *code = F_disable;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_disable_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_disable_not_s) == F_equal_to) {
         *code = F_disable_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_discard_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_discard_s) == F_equal_to) {
         *code = F_discard;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_discard_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_discard_not_s) == F_equal_to) {
         *code = F_discard_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_drop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_drop_s) == F_equal_to) {
         *code = F_drop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_drop_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_drop_not_s) == F_equal_to) {
         *code = F_drop_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_domain_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_domain_s) == F_equal_to) {
         *code = F_domain;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_domain_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_domain_not_s) == F_equal_to) {
         *code = F_domain_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_done_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_done_s) == F_equal_to) {
         *code = F_done;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_done_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_done_not_s) == F_equal_to) {
         *code = F_done_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_dummy_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_dummy_s) == F_equal_to) {
         *code = F_dummy;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_dummy_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_dummy_not_s) == F_equal_to) {
         *code = F_dummy_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_empty_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_empty_s) == F_equal_to) {
         *code = F_empty;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_empty_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_empty_not_s) == F_equal_to) {
         *code = F_empty_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_enable_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_enable_s) == F_equal_to) {
         *code = F_enable;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_enable_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_enable_not_s) == F_equal_to) {
         *code = F_enable_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_encoding_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_encoding_s) == F_equal_to) {
         *code = F_encoding;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_encoding_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_encoding_not_s) == F_equal_to) {
         *code = F_encoding_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_endian_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_endian_s) == F_equal_to) {
         *code = F_endian;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_endian_big_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_endian_big_s) == F_equal_to) {
         *code = F_endian_big;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_endian_little_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_endian_little_s) == F_equal_to) {
         *code = F_endian_little;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_endian_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_endian_not_s) == F_equal_to) {
         *code = F_endian_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eoa_s) == F_equal_to) {
         *code = F_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eoa_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eoa_not_s) == F_equal_to) {
         *code = F_eoa_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eof_s) == F_equal_to) {
         *code = F_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eof_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eof_not_s) == F_equal_to) {
         *code = F_eof_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eol_s) == F_equal_to) {
         *code = F_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eol_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eol_not_s) == F_equal_to) {
         *code = F_eol_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eos_s) == F_equal_to) {
         *code = F_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_eos_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_eos_not_s) == F_equal_to) {
         *code = F_eos_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_execute_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_execute_s) == F_equal_to) {
         *code = F_execute;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_execute_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_execute_not_s) == F_equal_to) {
         *code = F_execute_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_exist_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_exist_s) == F_equal_to) {
         *code = F_exist;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_exist_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_exist_not_s) == F_equal_to) {
         *code = F_exist_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_exit_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_exit_s) == F_equal_to) {
         *code = F_exit;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_exit_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_exit_not_s) == F_equal_to) {
         *code = F_exit_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_failure_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_failure_s) == F_equal_to) {
         *code = F_failure;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_failure_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_failure_not_s) == F_equal_to) {
         *code = F_failure_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_family_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_family_s) == F_equal_to) {
         *code = F_family;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_family_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_family_not_s) == F_equal_to) {
         *code = F_family_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_fifo_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_fifo_s) == F_equal_to) {
         *code = F_fifo;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_fifo_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_fifo_not_s) == F_equal_to) {
         *code = F_fifo_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_first_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_first_s) == F_equal_to) {
         *code = F_first;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_first_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_first_not_s) == F_equal_to) {
         *code = F_first_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_footer_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_footer_s) == F_equal_to) {
         *code = F_footer;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_footer_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_footer_not_s) == F_equal_to) {
         *code = F_footer_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_fork_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_fork_s) == F_equal_to) {
         *code = F_fork;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_fork_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_fork_not_s) == F_equal_to) {
         *code = F_fork_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_format_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_format_s) == F_equal_to) {
         *code = F_format;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_format_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_format_not_s) == F_equal_to) {
         *code = F_format_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_found_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_found_s) == F_equal_to) {
         *code = F_found;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_found_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_found_not_s) == F_equal_to) {
         *code = F_found_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_full_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_full_s) == F_equal_to) {
         *code = F_full;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_full_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_full_not_s) == F_equal_to) {
         *code = F_full_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_group_s) == F_equal_to) {
         *code = F_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_group_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_group_not_s) == F_equal_to) {
         *code = F_group_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_halt_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_halt_s) == F_equal_to) {
         *code = F_halt;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_halt_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_halt_not_s) == F_equal_to) {
         *code = F_halt_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_header_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_header_s) == F_equal_to) {
         *code = F_header;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_header_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_header_not_s) == F_equal_to) {
         *code = F_header_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_help_s) == F_equal_to) {
+      if (f_compare_dynamic(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) {
+      if (f_compare_dynamic(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) {
+      if (f_compare_dynamic(name, f_status_ignore_s) == F_equal_to) {
         *code = F_ignore;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_ignore_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_ignore_not_s) == F_equal_to) {
         *code = F_ignore_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_implemented_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_implemented_s) == F_equal_to) {
         *code = F_implemented;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_implemented_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_implemented_not_s) == F_equal_to) {
         *code = F_implemented_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_input_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_input_s) == F_equal_to) {
         *code = F_input;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_input_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_input_not_s) == F_equal_to) {
         *code = F_input_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_input_output_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_input_output_s) == F_equal_to) {
         *code = F_input_output;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_interrupt_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_interrupt_s) == F_equal_to) {
         *code = F_interrupt;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_interrupt_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_interrupt_not_s) == F_equal_to) {
         *code = F_interrupt_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_keep_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_keep_s) == F_equal_to) {
         *code = F_keep;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_keep_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_keep_not_s) == F_equal_to) {
         *code = F_keep_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_known_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_known_s) == F_equal_to) {
         *code = F_known;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_known_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_known_not_s) == F_equal_to) {
         *code = F_known_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_last_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_last_s) == F_equal_to) {
         *code = F_last;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_last_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_last_not_s) == F_equal_to) {
         *code = F_last_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_limit_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_limit_s) == F_equal_to) {
         *code = F_limit;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_limit_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_limit_not_s) == F_equal_to) {
         *code = F_limit_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_link_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_link_s) == F_equal_to) {
         *code = F_link;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_link_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_link_not_s) == F_equal_to) {
         *code = F_link_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_live_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_live_s) == F_equal_to) {
         *code = F_live;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_live_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_live_not_s) == F_equal_to) {
         *code = F_live_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_local_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_local_s) == F_equal_to) {
         *code = F_local;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_local_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_local_not_s) == F_equal_to) {
         *code = F_local_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_lock_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_lock_s) == F_equal_to) {
         *code = F_lock;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_lock_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_lock_not_s) == F_equal_to) {
         *code = F_lock_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_loop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_loop_s) == F_equal_to) {
         *code = F_loop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_loop_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_loop_not_s) == F_equal_to) {
         *code = F_loop_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_maybe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_maybe_s) == F_equal_to) {
         *code = F_maybe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_maybe_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_maybe_not_s) == F_equal_to) {
         *code = F_maybe_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_memory_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_memory_s) == F_equal_to) {
         *code = F_memory;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_memory_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_memory_not_s) == F_equal_to) {
         *code = F_memory_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_message_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_message_s) == F_equal_to) {
         *code = F_message;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_message_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_message_not_s) == F_equal_to) {
         *code = F_message_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_middle_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_middle_s) == F_equal_to) {
         *code = F_middle;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_middle_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_middle_not_s) == F_equal_to) {
         *code = F_middle_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_minor_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_minor_s) == F_equal_to) {
         *code = F_minor;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_minor_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_minor_not_s) == F_equal_to) {
         *code = F_minor_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_moderate_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_moderate_s) == F_equal_to) {
         *code = F_moderate;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_moderate_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_moderate_not_s) == F_equal_to) {
         *code = F_moderate_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_mount_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_mount_s) == F_equal_to) {
         *code = F_mount;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_mount_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_mount_not_s) == F_equal_to) {
         *code = F_mount_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_name_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_name_s) == F_equal_to) {
         *code = F_name;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_name_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_name_not_s) == F_equal_to) {
         *code = F_name_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_need_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_need_s) == F_equal_to) {
         *code = F_need;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_need_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_need_not_s) == F_equal_to) {
         *code = F_need_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_next_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_next_s) == F_equal_to) {
         *code = F_next;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_next_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_next_not_s) == F_equal_to) {
         *code = F_next_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_nice_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_nice_s) == F_equal_to) {
         *code = F_nice;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_nice_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_nice_not_s) == F_equal_to) {
         *code = F_nice_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_no_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_no_s) == F_equal_to) {
         *code = F_no;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_no_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_no_not_s) == F_equal_to) {
         *code = F_no_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_object_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_object_s) == F_equal_to) {
         *code = F_object;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_object_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_object_not_s) == F_equal_to) {
         *code = F_object_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_once_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_once_s) == F_equal_to) {
         *code = F_once;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_once_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_once_not_s) == F_equal_to) {
         *code = F_once_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_option_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_option_s) == F_equal_to) {
         *code = F_option;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_option_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_option_not_s) == F_equal_to) {
         *code = F_option_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_output_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_output_s) == F_equal_to) {
         *code = F_output;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_output_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_output_not_s) == F_equal_to) {
         *code = F_output_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_packet_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_packet_s) == F_equal_to) {
         *code = F_packet;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_packet_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_packet_not_s) == F_equal_to) {
         *code = F_packet_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_parameter_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_parameter_s) == F_equal_to) {
         *code = F_parameter;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_parameter_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_parameter_not_s) == F_equal_to) {
         *code = F_parameter_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_parent_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_parent_s) == F_equal_to) {
         *code = F_parent;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_parent_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_parent_not_s) == F_equal_to) {
         *code = F_parent_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_payload_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_payload_s) == F_equal_to) {
         *code = F_payload;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_payload_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_payload_not_s) == F_equal_to) {
         *code = F_payload_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_pipe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_pipe_s) == F_equal_to) {
         *code = F_pipe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_pipe_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_pipe_not_s) == F_equal_to) {
         *code = F_pipe_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_port_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_port_s) == F_equal_to) {
         *code = F_port;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_port_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_port_not_s) == F_equal_to) {
         *code = F_port_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_previous_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_previous_s) == F_equal_to) {
         *code = F_previous;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_previous_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_previous_not_s) == F_equal_to) {
         *code = F_previous_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_processor_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_processor_s) == F_equal_to) {
         *code = F_processor;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_processor_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_processor_not_s) == F_equal_to) {
         *code = F_processor_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_progress_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_progress_s) == F_equal_to) {
         *code = F_progress;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_progress_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_progress_not_s) == F_equal_to) {
         *code = F_progress_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_prohibited_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_prohibited_s) == F_equal_to) {
         *code = F_prohibited;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_prohibited_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_prohibited_not_s) == F_equal_to) {
         *code = F_prohibited_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_property_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_property_s) == F_equal_to) {
         *code = F_property;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_property_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_property_not_s) == F_equal_to) {
         *code = F_property_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_protocol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_protocol_s) == F_equal_to) {
         *code = F_protocol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_protocol_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_protocol_not_s) == F_equal_to) {
         *code = F_protocol_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_range_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_range_s) == F_equal_to) {
         *code = F_range;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_range_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_range_not_s) == F_equal_to) {
         *code = F_range_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_read_s) == F_equal_to) {
         *code = F_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_read_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_read_not_s) == F_equal_to) {
         *code = F_read_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_read_only_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_read_only_s) == F_equal_to) {
         *code = F_read_only;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_ready_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_ready_s) == F_equal_to) {
         *code = F_ready;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_ready_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_ready_not_s) == F_equal_to) {
         *code = F_ready_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_receive_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_receive_s) == F_equal_to) {
         *code = F_receive;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_receive_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_receive_not_s) == F_equal_to) {
         *code = F_receive_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_recover_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_recover_s) == F_equal_to) {
         *code = F_recover;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_recover_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_recover_not_s) == F_equal_to) {
         *code = F_recover_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_recurse_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_recurse_s) == F_equal_to) {
         *code = F_recurse;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_recurse_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_recurse_not_s) == F_equal_to) {
         *code = F_recurse_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_regular_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_regular_s) == F_equal_to) {
         *code = F_regular;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_regular_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_regular_not_s) == F_equal_to) {
         *code = F_regular_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_relative_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_relative_s) == F_equal_to) {
         *code = F_relative;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_relative_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_relative_not_s) == F_equal_to) {
         *code = F_relative_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_remote_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_remote_s) == F_equal_to) {
         *code = F_remote;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_remote_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_remote_not_s) == F_equal_to) {
         *code = F_remote_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_repeat_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_repeat_s) == F_equal_to) {
         *code = F_repeat;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_repeat_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_repeat_not_s) == F_equal_to) {
         *code = F_repeat_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_require_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_require_s) == F_equal_to) {
         *code = F_require;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_require_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_require_not_s) == F_equal_to) {
         *code = F_require_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_resource_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_resource_s) == F_equal_to) {
         *code = F_resource;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_resource_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_resource_not_s) == F_equal_to) {
         *code = F_resource_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_restart_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_restart_s) == F_equal_to) {
         *code = F_restart;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_restart_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_restart_not_s) == F_equal_to) {
         *code = F_restart_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_restore_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_restore_s) == F_equal_to) {
         *code = F_restore;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_restore_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_restore_not_s) == F_equal_to) {
         *code = F_restore_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_revert_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_revert_s) == F_equal_to) {
         *code = F_revert;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_revert_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_revert_not_s) == F_equal_to) {
         *code = F_revert_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_schedule_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_schedule_s) == F_equal_to) {
         *code = F_schedule;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_schedule_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_schedule_not_s) == F_equal_to) {
         *code = F_schedule_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_search_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_search_s) == F_equal_to) {
         *code = F_search;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_search_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_search_not_s) == F_equal_to) {
         *code = F_search_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_send_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_send_s) == F_equal_to) {
         *code = F_send;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_send_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_send_not_s) == F_equal_to) {
         *code = F_send_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_size_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_size_s) == F_equal_to) {
         *code = F_size;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_size_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_size_not_s) == F_equal_to) {
         *code = F_size_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_s) == F_equal_to) {
         *code = F_signal;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_signal_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_signal_not_s) == F_equal_to) {
         *code = F_signal_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_space_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_space_s) == F_equal_to) {
         *code = F_space;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_space_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_space_not_s) == F_equal_to) {
         *code = F_space_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_skip_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_skip_s) == F_equal_to) {
         *code = F_skip;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_skip_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_skip_not_s) == F_equal_to) {
         *code = F_skip_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_start_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_start_s) == F_equal_to) {
         *code = F_start;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_start_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_start_not_s) == F_equal_to) {
         *code = F_start_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_status_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_status_s) == F_equal_to) {
         *code = F_status;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_status_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_status_not_s) == F_equal_to) {
         *code = F_status_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_stop_s) == F_equal_to) {
         *code = F_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_stop_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_stop_not_s) == F_equal_to) {
         *code = F_stop_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_store_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_store_s) == F_equal_to) {
         *code = F_store;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_store_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_store_not_s) == F_equal_to) {
         *code = F_store_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_stream_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_stream_s) == F_equal_to) {
         *code = F_stream;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_stream_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_stream_not_s) == F_equal_to) {
         *code = F_stream_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_string_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_string_s) == F_equal_to) {
         *code = F_string;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_string_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_string_not_s) == F_equal_to) {
         *code = F_string_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_string_too_large_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_string_too_large_s) == F_equal_to) {
         *code = F_string_too_large;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_string_too_small_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_string_too_small_s) == F_equal_to) {
         *code = F_string_too_small;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_success_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_success_s) == F_equal_to) {
         *code = F_success;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_success_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_success_not_s) == F_equal_to) {
         *code = F_success_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_support_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_support_s) == F_equal_to) {
         *code = F_support;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_support_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_support_not_s) == F_equal_to) {
         *code = F_support_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_syntax_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_syntax_s) == F_equal_to) {
         *code = F_syntax;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_syntax_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_syntax_not_s) == F_equal_to) {
         *code = F_syntax_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminate_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminate_s) == F_equal_to) {
         *code = F_terminate;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminate_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminate_not_s) == F_equal_to) {
         *code = F_terminate_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_thread_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_thread_s) == F_equal_to) {
         *code = F_thread;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_thread_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_thread_not_s) == F_equal_to) {
         *code = F_thread_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_time_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_time_s) == F_equal_to) {
         *code = F_time;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_time_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_time_not_s) == F_equal_to) {
         *code = F_time_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_time_out_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_time_out_s) == F_equal_to) {
         *code = F_time_out;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_too_large_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_too_large_s) == F_equal_to) {
         *code = F_too_large;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_too_small_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_too_small_s) == F_equal_to) {
         *code = F_too_small;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_top_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_top_s) == F_equal_to) {
         *code = F_top;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_top_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_top_not_s) == F_equal_to) {
         *code = F_top_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_type_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_type_s) == F_equal_to) {
         *code = F_type;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_type_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_type_not_s) == F_equal_to) {
         *code = F_type_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_user_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_user_s) == F_equal_to) {
         *code = F_user;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_user_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_user_not_s) == F_equal_to) {
         *code = F_user_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_utf_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_utf_s) == F_equal_to) {
         *code = F_utf;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_utf_fragment_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_utf_fragment_s) == F_equal_to) {
         *code = F_utf_fragment;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_utf_fragment_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_utf_fragment_not_s) == F_equal_to) {
         *code = F_utf_fragment_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_utf_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_utf_not_s) == F_equal_to) {
         *code = F_utf_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_valid_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_valid_s) == F_equal_to) {
         *code = F_valid;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_valid_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_valid_not_s) == F_equal_to) {
         *code = F_valid_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_value_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_value_s) == F_equal_to) {
         *code = F_value;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_value_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_value_not_s) == F_equal_to) {
         *code = F_value_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_wait_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_wait_s) == F_equal_to) {
         *code = F_wait;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_wait_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_wait_not_s) == F_equal_to) {
         *code = F_wait_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_want_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_want_s) == F_equal_to) {
         *code = F_want;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_want_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_want_not_s) == F_equal_to) {
         *code = F_want_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_wish_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_wish_s) == F_equal_to) {
         *code = F_wish;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_wish_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_wish_not_s) == F_equal_to) {
         *code = F_wish_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_world_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_world_s) == F_equal_to) {
         *code = F_world;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_world_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_world_not_s) == F_equal_to) {
         *code = F_world_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_write_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_write_s) == F_equal_to) {
         *code = F_write;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_write_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_write_not_s) == F_equal_to) {
         *code = F_write_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_write_only_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_write_only_s) == F_equal_to) {
         *code = F_write_only;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_yes_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_yes_s) == F_equal_to) {
         *code = F_yes;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_yes_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_yes_not_s) == F_equal_to) {
         *code = F_yes_not;
 
         return F_none;
@@ -2270,49 +2270,49 @@ extern "C" {
     #endif // _di_f_status_basic_s_
 
     #ifndef _di_f_status_return_s_
-      if (fl_string_dynamic_compare(name, f_status_debug_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_debug_s) == F_equal_to) {
         *code = F_debug;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_debug_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_debug_not_s) == F_equal_to) {
         *code = F_debug_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_error_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_error_s) == F_equal_to) {
         *code = F_error;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_error_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_error_not_s) == F_equal_to) {
         *code = F_error_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_fine_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_fine_s) == F_equal_to) {
         *code = F_fine;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_fine_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_fine_not_s) == F_equal_to) {
         *code = F_fine_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_warning_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_warning_s) == F_equal_to) {
         *code = F_warning;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_warning_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_warning_not_s) == F_equal_to) {
         *code = F_warning_not;
 
         return F_none;
@@ -2320,25 +2320,25 @@ extern "C" {
     #endif // _di_f_status_return_s_
 
     #ifndef _di_f_status_array_s_
-      if (fl_string_dynamic_compare(name, f_status_array_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_array_s) == F_equal_to) {
         *code = F_array;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_array_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_array_not_s) == F_equal_to) {
         *code = F_array_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_array_too_large_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_array_too_large_s) == F_equal_to) {
         *code = F_array_too_large;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_array_too_small_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_array_too_small_s) == F_equal_to) {
         *code = F_array_too_small;
 
         return F_none;
@@ -2346,55 +2346,55 @@ extern "C" {
     #endif // _di_f_status_array_s_
 
     #ifndef _di_f_status_available_s_
-      if (fl_string_dynamic_compare(name, f_status_available_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_s) == F_equal_to) {
         *code = F_available;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_s) == F_equal_to) {
         *code = F_available_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_address_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_address_s) == F_equal_to) {
         *code = F_available_not_address;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_buffer_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_buffer_s) == F_equal_to) {
         *code = F_available_not_buffer;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_device_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_device_s) == F_equal_to) {
         *code = F_available_not_device;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_pipe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_pipe_s) == F_equal_to) {
         *code = F_available_not_pipe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_port_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_port_s) == F_equal_to) {
         *code = F_available_not_port;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_process_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_process_s) == F_equal_to) {
         *code = F_available_not_process;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_available_not_socket_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_available_not_socket_s) == F_equal_to) {
         *code = F_available_not_socket;
 
         return F_none;
@@ -2402,55 +2402,55 @@ extern "C" {
     #endif // _di_f_status_available_s_
 
     #ifndef _di_f_status_busy_s_
-      if (fl_string_dynamic_compare(name, f_status_busy_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_s) == F_equal_to) {
         *code = F_busy;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_address_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_address_s) == F_equal_to) {
         *code = F_busy_address;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_buffer_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_buffer_s) == F_equal_to) {
         *code = F_busy_buffer;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_device_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_device_s) == F_equal_to) {
         *code = F_busy_device;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_not_s) == F_equal_to) {
         *code = F_busy_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_pipe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_pipe_s) == F_equal_to) {
         *code = F_busy_pipe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_port_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_port_s) == F_equal_to) {
         *code = F_busy_port;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_process_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_process_s) == F_equal_to) {
         *code = F_busy_process;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_busy_socket_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_busy_socket_s) == F_equal_to) {
         *code = F_busy_socket;
 
         return F_none;
@@ -2458,133 +2458,133 @@ extern "C" {
     #endif // _di_f_status_busy_s_
 
     #ifndef _di_f_status_network_s_
-      if (fl_string_dynamic_compare(name, f_status_network_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_s) == F_equal_to) {
         *code = F_network;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_busy_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_busy_s) == F_equal_to) {
         *code = F_network_busy;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_busy_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_busy_not_s) == F_equal_to) {
         *code = F_network_busy_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_client_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_client_s) == F_equal_to) {
         *code = F_network_client;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_client_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_client_not_s) == F_equal_to) {
         *code = F_network_client_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_device_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_device_s) == F_equal_to) {
         *code = F_network_device;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_device_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_device_not_s) == F_equal_to) {
         *code = F_network_device_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_found_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_found_s) == F_equal_to) {
         *code = F_network_found;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_found_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_found_not_s) == F_equal_to) {
         *code = F_network_found_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_lost_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_lost_s) == F_equal_to) {
         *code = F_network_lost;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_lost_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_lost_not_s) == F_equal_to) {
         *code = F_network_lost_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_not_s) == F_equal_to) {
         *code = F_network_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_reach_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_reach_s) == F_equal_to) {
         *code = F_network_reach;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_reach_client_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_reach_client_s) == F_equal_to) {
         *code = F_network_reach_client;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_reach_client_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_reach_client_not_s) == F_equal_to) {
         *code = F_network_reach_client_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_reach_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_reach_not_s) == F_equal_to) {
         *code = F_network_reach_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_reach_server_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_reach_server_s) == F_equal_to) {
         *code = F_network_reach_server;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_reach_server_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_reach_server_not_s) == F_equal_to) {
         *code = F_network_reach_server_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_server_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_server_s) == F_equal_to) {
         *code = F_network_server;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_server_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_server_not_s) == F_equal_to) {
         *code = F_network_server_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_time_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_time_s) == F_equal_to) {
         *code = F_network_time;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_network_time_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_network_time_not_s) == F_equal_to) {
         *code = F_network_time_not;
 
         return F_none;
@@ -2592,103 +2592,103 @@ extern "C" {
     #endif // _di_f_status_network_s_
 
     #ifndef _di_f_status_number_s_
-      if (fl_string_dynamic_compare(name, f_status_number_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_s) == F_equal_to) {
         *code = F_number;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_decimal_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_decimal_s) == F_equal_to) {
         *code = F_number_decimal;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_decimal_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_decimal_not_s) == F_equal_to) {
         *code = F_number_decimal_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_divide_by_zero_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_divide_by_zero_s) == F_equal_to) {
         *code = F_number_divide_by_zero;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_negative_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_negative_s) == F_equal_to) {
         *code = F_number_negative;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_negative_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_negative_not_s) == F_equal_to) {
         *code = F_number_negative_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_not_s) == F_equal_to) {
         *code = F_number_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_overflow_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_overflow_s) == F_equal_to) {
         *code = F_number_overflow;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_positive_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_positive_s) == F_equal_to) {
         *code = F_number_positive;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_positive_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_positive_not_s) == F_equal_to) {
         *code = F_number_positive_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_too_large_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_too_large_s) == F_equal_to) {
         *code = F_number_too_large;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_too_small_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_too_small_s) == F_equal_to) {
         *code = F_number_too_small;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_underflow_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_underflow_s) == F_equal_to) {
         *code = F_number_underflow;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_whole_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_whole_s) == F_equal_to) {
         *code = F_number_whole;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_whole_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_whole_not_s) == F_equal_to) {
         *code = F_number_whole_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_zero_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_zero_s) == F_equal_to) {
         *code = F_number_zero;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_number_zero_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_number_zero_not_s) == F_equal_to) {
         *code = F_number_zero_not;
 
         return F_none;
@@ -2696,163 +2696,163 @@ extern "C" {
     #endif // _di_f_status_number_s_
 
     #ifndef _di_f_status_buffer_s_
-      if (fl_string_dynamic_compare(name, f_status_buffer_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_buffer_s) == F_equal_to) {
         *code = F_buffer;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_buffer_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_buffer_not_s) == F_equal_to) {
         *code = F_buffer_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_buffer_overflow_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_buffer_overflow_s) == F_equal_to) {
         *code = F_buffer_overflow;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_buffer_too_large_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_buffer_too_large_s) == F_equal_to) {
         *code = F_buffer_too_large;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_buffer_too_small_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_buffer_too_small_s) == F_equal_to) {
         *code = F_buffer_too_small;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_buffer_underflow_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_buffer_underflow_s) == F_equal_to) {
         *code = F_buffer_underflow;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_s) == F_equal_to) {
         *code = F_complete_not_utf;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_block_s) == F_equal_to) {
         *code = F_complete_not_utf_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_eoa_s) == F_equal_to) {
         *code = F_complete_not_utf_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_eof_s) == F_equal_to) {
         *code = F_complete_not_utf_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_eol_s) == F_equal_to) {
         *code = F_complete_not_utf_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_eos_s) == F_equal_to) {
         *code = F_complete_not_utf_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_complete_not_utf_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_complete_not_utf_stop_s) == F_equal_to) {
         *code = F_complete_not_utf_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_none_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_block_s) == F_equal_to) {
         *code = F_none_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_none_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_eoa_s) == F_equal_to) {
         *code = F_none_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_none_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_eof_s) == F_equal_to) {
         *code = F_none_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_none_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_eol_s) == F_equal_to) {
         *code = F_none_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_none_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_eos_s) == F_equal_to) {
         *code = F_none_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_none_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_none_stop_s) == F_equal_to) {
         *code = F_none_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_s) == F_equal_to) {
         *code = F_data;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_s) == F_equal_to) {
         *code = F_data_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_block_s) == F_equal_to) {
         *code = F_data_not_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_eoa_s) == F_equal_to) {
         *code = F_data_not_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_eof_s) == F_equal_to) {
         *code = F_data_not_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_eol_s) == F_equal_to) {
         *code = F_data_not_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_eos_s) == F_equal_to) {
         *code = F_data_not_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_data_not_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_data_not_stop_s) == F_equal_to) {
         *code = F_data_not_stop;
 
         return F_none;
@@ -2860,133 +2860,133 @@ extern "C" {
     #endif // _di_f_status_buffer_s_
 
     #ifndef _di_f_status_end_s_
-      if (fl_string_dynamic_compare(name, f_status_end_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_s) == F_equal_to) {
         *code = F_end;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_s) == F_equal_to) {
         *code = F_end_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_block_s) == F_equal_to) {
         *code = F_end_not_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_eoa_s) == F_equal_to) {
         *code = F_end_not_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_eof_s) == F_equal_to) {
         *code = F_end_not_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_eol_s) == F_equal_to) {
         *code = F_end_not_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_eos_s) == F_equal_to) {
         *code = F_end_not_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_s) == F_equal_to) {
         *code = F_end_not_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_block_s) == F_equal_to) {
         *code = F_end_not_group_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_eoa_s) == F_equal_to) {
         *code = F_end_not_group_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_eof_s) == F_equal_to) {
         *code = F_end_not_group_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_eol_s) == F_equal_to) {
         *code = F_end_not_group_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_eos_s) == F_equal_to) {
         *code = F_end_not_group_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_group_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_group_stop_s) == F_equal_to) {
         *code = F_end_not_group_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_s) == F_equal_to) {
         *code = F_end_not_nest;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_block_s) == F_equal_to) {
         *code = F_end_not_nest_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_eoa_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_eoa_s) == F_equal_to) {
         *code = F_end_not_nest_eoa;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_eof_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_eof_s) == F_equal_to) {
         *code = F_end_not_nest_eof;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_eol_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_eol_s) == F_equal_to) {
         *code = F_end_not_nest_eol;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_eos_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_eos_s) == F_equal_to) {
         *code = F_end_not_nest_eos;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_nest_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_nest_stop_s) == F_equal_to) {
         *code = F_end_not_nest_stop;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_end_not_stop_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_end_not_stop_s) == F_equal_to) {
         *code = F_end_not_stop;
 
         return F_none;
@@ -2994,19 +2994,19 @@ extern "C" {
     #endif // _di_f_status_end_s_
 
     #ifndef _di_f_status_process_s_
-      if (fl_string_dynamic_compare(name, f_status_process_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_process_s) == F_equal_to) {
         *code = F_process;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_process_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_process_not_s) == F_equal_to) {
         *code = F_process_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_process_too_many_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_process_too_many_s) == F_equal_to) {
         *code = F_process_too_many;
 
         return F_none;
@@ -3014,259 +3014,259 @@ extern "C" {
     #endif // _di_f_status_process_s_
 
     #ifndef _di_f_status_file_s_
-      if (fl_string_dynamic_compare(name, f_status_file_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_s) == F_equal_to) {
         *code = F_file;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_close_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_close_s) == F_equal_to) {
         *code = F_file_close;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_closed_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_closed_s) == F_equal_to) {
         *code = F_file_closed;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_descriptor_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_descriptor_s) == F_equal_to) {
         *code = F_file_descriptor;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_descriptor_max_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_descriptor_max_s) == F_equal_to) {
         *code = F_file_descriptor_max;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_descriptor_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_descriptor_not_s) == F_equal_to) {
         *code = F_file_descriptor_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_empty_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_empty_s) == F_equal_to) {
         *code = F_file_empty;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_flush_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_flush_s) == F_equal_to) {
         *code = F_file_flush;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_found_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_found_s) == F_equal_to) {
         *code = F_file_found;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_found_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_found_not_s) == F_equal_to) {
         *code = F_file_found_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_not_s) == F_equal_to) {
         *code = F_file_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_open_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_open_s) == F_equal_to) {
         *code = F_file_open;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_open_max_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_open_max_s) == F_equal_to) {
         *code = F_file_open_max;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_opened_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_opened_s) == F_equal_to) {
         *code = F_file_opened;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_overflow_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_overflow_s) == F_equal_to) {
         *code = F_file_overflow;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_purge_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_purge_s) == F_equal_to) {
         *code = F_file_purge;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_read_s) == F_equal_to) {
         *code = F_file_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_reallocation_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_reallocation_s) == F_equal_to) {
         *code = F_file_reallocation;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_seek_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_seek_s) == F_equal_to) {
         *code = F_file_seek;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_stat_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_stat_s) == F_equal_to) {
         *code = F_file_stat;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_synchronize_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_synchronize_s) == F_equal_to) {
         *code = F_file_synchronize;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_block_s) == F_equal_to) {
         *code = F_file_type_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_character_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_character_s) == F_equal_to) {
         *code = F_file_type_character;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_directory_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_directory_s) == F_equal_to) {
         *code = F_file_type_directory;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_fifo_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_fifo_s) == F_equal_to) {
         *code = F_file_type_fifo;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_link_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_link_s) == F_equal_to) {
         *code = F_file_type_link;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_block_s) == F_equal_to) {
         *code = F_file_type_not_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_character_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_character_s) == F_equal_to) {
         *code = F_file_type_not_character;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_directory_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_directory_s) == F_equal_to) {
         *code = F_file_type_not_directory;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_fifo_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_fifo_s) == F_equal_to) {
         *code = F_file_type_not_fifo;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_link_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_link_s) == F_equal_to) {
         *code = F_file_type_not_link;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_pipe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_pipe_s) == F_equal_to) {
         *code = F_file_type_not_pipe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_regular_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_regular_s) == F_equal_to) {
         *code = F_file_type_not_regular;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_socket_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_socket_s) == F_equal_to) {
         *code = F_file_type_not_socket;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_not_unknown_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_not_unknown_s) == F_equal_to) {
         *code = F_file_type_not_unknown;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_pipe_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_pipe_s) == F_equal_to) {
         *code = F_file_type_pipe;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_regular_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_regular_s) == F_equal_to) {
         *code = F_file_type_regular;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_socket_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_socket_s) == F_equal_to) {
         *code = F_file_type_socket;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_type_unknown_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_type_unknown_s) == F_equal_to) {
         *code = F_file_type_unknown;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_underflow_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_underflow_s) == F_equal_to) {
         *code = F_file_underflow;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_utf_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_utf_s) == F_equal_to) {
         *code = F_file_utf;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_utf_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_utf_not_s) == F_equal_to) {
         *code = F_file_utf_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_file_write_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_file_write_s) == F_equal_to) {
         *code = F_file_write;
 
         return F_none;
@@ -3274,25 +3274,25 @@ extern "C" {
     #endif // _di_f_status_file_s_
 
     #ifndef _di_f_status_filesystem_s_
-      if (fl_string_dynamic_compare(name, f_status_filesystem_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_filesystem_s) == F_equal_to) {
         *code = F_filesystem;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_filesystem_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_filesystem_not_s) == F_equal_to) {
         *code = F_filesystem_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_filesystem_quota_block_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_filesystem_quota_block_s) == F_equal_to) {
         *code = F_filesystem_quota_block;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_filesystem_quota_reached_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_filesystem_quota_reached_s) == F_equal_to) {
         *code = F_filesystem_quota_reached;
 
         return F_none;
@@ -3300,121 +3300,121 @@ extern "C" {
     #endif // _di_f_status_filesystem_s_
 
     #ifndef _di_f_status_directory_s_
-      if (fl_string_dynamic_compare(name, f_status_directory_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_s) == F_equal_to) {
         *code = F_directory;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_close_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_close_s) == F_equal_to) {
         *code = F_directory_close;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_closed_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_closed_s) == F_equal_to) {
         *code = F_directory_closed;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_descriptor_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_descriptor_s) == F_equal_to) {
         *code = F_directory_descriptor;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_empty_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_empty_s) == F_equal_to) {
         *code = F_directory_empty;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_empty_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_empty_not_s) == F_equal_to) {
         *code = F_directory_empty_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_found_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_found_s) == F_equal_to) {
         *code = F_directory_found;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_found_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_found_not_s) == F_equal_to) {
         *code = F_directory_found_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_flush_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_flush_s) == F_equal_to) {
         *code = F_directory_flush;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_link_max_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_link_max_s) == F_equal_to) {
         *code = F_directory_link_max;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_not_s) == F_equal_to) {
         *code = F_directory_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_open_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_open_s) == F_equal_to) {
         *code = F_directory_open;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_purge_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_purge_s) == F_equal_to) {
         *code = F_directory_purge;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_read_s) == F_equal_to) {
         *code = F_directory_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_stream_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_stream_s) == F_equal_to) {
         *code = F_directory_stream;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_support_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_support_not_s) == F_equal_to) {
         *code = F_directory_support_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_synchronize_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_synchronize_s) == F_equal_to) {
         *code = F_directory_synchronize;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_utf_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_utf_s) == F_equal_to) {
         *code = F_directory_utf;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_utf_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_utf_not_s) == F_equal_to) {
         *code = F_directory_utf_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_directory_write_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_directory_write_s) == F_equal_to) {
         *code = F_directory_write;
 
         return F_none;
@@ -3422,37 +3422,37 @@ extern "C" {
     #endif // _di_f_status_directory_s_
 
     #ifndef _di_f_status_socket_s_
-      if (fl_string_dynamic_compare(name, f_status_socket_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_socket_s) == F_equal_to) {
         *code = F_socket;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_socket_client_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_socket_client_s) == F_equal_to) {
         *code = F_socket_client;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_socket_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_socket_not_s) == F_equal_to) {
         *code = F_socket_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_socket_receive_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_socket_receive_s) == F_equal_to) {
         *code = F_socket_receive;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_socket_send_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_socket_send_s) == F_equal_to) {
         *code = F_socket_send;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_socket_target_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_socket_target_s) == F_equal_to) {
         *code = F_socket_target;
 
         return F_none;
@@ -3460,25 +3460,25 @@ extern "C" {
     #endif // _di_f_status_socket_s_
 
     #ifndef _di_f_status_compare_s_
-      if (fl_string_dynamic_compare(name, f_status_equal_to_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_equal_to_s) == F_equal_to) {
         *code = F_equal_to;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_equal_to_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_equal_to_not_s) == F_equal_to) {
         *code = F_equal_to_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_than_greater_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_than_greater_s) == F_equal_to) {
         *code = F_than_greater;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_than_less_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_than_less_s) == F_equal_to) {
         *code = F_than_less;
 
         return F_none;
@@ -3486,145 +3486,145 @@ extern "C" {
     #endif // _di_f_status_compare_s_
 
     #ifndef _di_f_status_access_s_
-      if (fl_string_dynamic_compare(name, f_status_access_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_s) == F_equal_to) {
         *code = F_access;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_s) == F_equal_to) {
         *code = F_access_denied;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_user_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_user_s) == F_equal_to) {
         *code = F_access_denied_user;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_group_s) == F_equal_to) {
         *code = F_access_denied_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_world_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_world_s) == F_equal_to) {
         *code = F_access_denied_world;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_read_s) == F_equal_to) {
         *code = F_access_denied_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_write_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_write_s) == F_equal_to) {
         *code = F_access_denied_write;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_execute_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_execute_s) == F_equal_to) {
         *code = F_access_denied_execute;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_denied_super_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_denied_super_s) == F_equal_to) {
         *code = F_access_denied_super;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_s) == F_equal_to) {
         *code = F_access_granted;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_user_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_user_s) == F_equal_to) {
         *code = F_access_granted_user;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_group_s) == F_equal_to) {
         *code = F_access_granted_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_world_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_world_s) == F_equal_to) {
         *code = F_access_granted_world;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_read_s) == F_equal_to) {
         *code = F_access_granted_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_write_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_write_s) == F_equal_to) {
         *code = F_access_granted_write;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_execute_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_execute_s) == F_equal_to) {
         *code = F_access_granted_execute;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_group_s) == F_equal_to) {
         *code = F_access_granted_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_read_s) == F_equal_to) {
         *code = F_access_granted_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_super_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_super_s) == F_equal_to) {
         *code = F_access_granted_super;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_granted_user_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_granted_user_s) == F_equal_to) {
         *code = F_access_granted_user;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_group_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_group_s) == F_equal_to) {
         *code = F_access_group;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_mode_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_mode_s) == F_equal_to) {
         *code = F_access_mode;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_not_s) == F_equal_to) {
         *code = F_access_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_access_owner_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_access_owner_s) == F_equal_to) {
         *code = F_access_owner;
 
         return F_none;
@@ -3632,68 +3632,68 @@ extern "C" {
     #endif // _di_f_status_access_s_
 
     #ifndef _di_f_status_terminal_s_
-      if (fl_string_dynamic_compare(name, f_status_terminal_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_s) == F_equal_to) {
         *code = F_terminal;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_access_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_access_s) == F_equal_to) {
         *code = F_terminal_access;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_known_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_known_s) == F_equal_to) {
         *code = F_terminal_known;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_known_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_known_not_s) == F_equal_to) {
         *code = F_terminal_known_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_not_s) == F_equal_to) {
         *code = F_terminal_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_prohibited_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_prohibited_s) == F_equal_to) {
         *code = F_terminal_prohibited;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_read_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_read_s) == F_equal_to) {
         *code = F_terminal_read;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_valid_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_valid_s) == F_equal_to) {
         *code = F_terminal_valid;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_valid_not_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_valid_not_s) == F_equal_to) {
         *code = F_terminal_valid_not;
 
         return F_none;
       }
 
-      if (fl_string_dynamic_compare(name, f_status_terminal_write_s) == F_equal_to) {
+      if (f_compare_dynamic(name, f_status_terminal_write_s) == F_equal_to) {
         *code = F_terminal_write;
 
         return F_none;
       }
     #endif // _di_f_status_terminal_s_
 
-    if (fl_string_dynamic_compare(name, f_status_status_code_last_s) == F_equal_to) {
+    if (f_compare_dynamic(name, f_status_status_code_last_s) == F_equal_to) {
       *code = F_status_code_last;
 
       return F_none;
index 13293d11f4274173f50da6d5b53a6fcb182b85ca..87a3c1be55be00a96b1b954302024285a6996cad 100644 (file)
 #include <fll/level_0/memory.h>
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/conversion.h>
+#include <fll/level_0/parse.h>
 #include <fll/level_0/status_string.h>
 
-// FLL-1 includes.
-#include <fll/level_1/string.h>
-
 #ifdef __cplusplus
 extern "C" {
 #endif
index 524d9511748cd3b1ebf28e8ad848ea32fc3efba1..06e84ce77ed371f20d3eb2d43ad4eeea41e875c3 100644 (file)
@@ -5,6 +5,7 @@ f_status
 f_memory
 f_string
 f_utf
+f_compare
 f_conversion
+f_parse
 f_status_string
-fl_string
index d3970d428bcbcd700090468c3e67d21a24e6aa16..1411f154bba464717b774affa58e985ced5da39c 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfl_string -lf_conversion -lf_memory -lf_status_string -lf_string -lf_utf
+build_libraries-individual -lf_compare -lf_conversion -lf_parse -lf_memory -lf_status_string -lf_string -lf_utf
 
 build_sources_library status_string.c
 
index 7ddb2d2b1c08e564a61ec815b7e671daa6a4919d..b2b01205f85b3a619bff82460dfc548ae6c31297 100644 (file)
@@ -23,7 +23,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lcmocka
-build_libraries-individual -lfl_string -lf_conversion -lf_memory -lf_status_string -lf_string -lf_utf -lfll_status_string
+build_libraries-individual -lf_compare -lf_conversion -lf_memory -lf_parse -lf_status_string -lf_string -lf_utf -lfll_status_string
 
 build_sources_program test-status_string-from.c
 build_sources_program test-status_string.c
index 272924caad74860ec081eaf958cfe1dbf1d6a14c..cc2fc2fd96995544d10e8deec6bdddf04764255f 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 #include <fll/level_1/utf.h>
 
 // FLL-2 includes.
index 6e53394d6e2428c9491a65f6133735730077224c..9b67302c4a4ac7694a7782ba99070f0ead0ceb4f 100644 (file)
@@ -12,11 +12,11 @@ f_conversion
 f_file
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_print
-fl_string
 
 fll_error
 fll_print
index de67e8ae5f1b4f624baf0f872a30d44c6dfef856..c5d010d80969f0ca08e018eca8016522af0d4fdb 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_memory -lf_pipe -lf_print -lf_signal -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion -lfl_print -lf_color -lf_console -lf_conversion -lf_file -lf_memory -lf_pipe -lf_print -lf_rip -lf_signal -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index b64d50ccc1af4d7af5ff4f70d760653894428a42..3195abb88915a55e1821a23a2f4a4e41ea074493 100644 (file)
@@ -29,55 +29,55 @@ extern "C" {
 #ifndef _di_control_action_type_identify_
   uint8_t control_action_type_identify(const f_string_static_t action) {
 
-    if (fl_string_dynamic_compare(action, control_freeze_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_freeze_s) == F_equal_to) {
       return control_action_type_freeze_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_kexec_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_kexec_s) == F_equal_to) {
       return control_action_type_kexec_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_kill_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_kill_s) == F_equal_to) {
       return control_action_type_kill_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_pause_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_pause_s) == F_equal_to) {
       return control_action_type_pause_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_reboot_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_reboot_s) == F_equal_to) {
       return control_action_type_reboot_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_reload_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_reload_s) == F_equal_to) {
       return control_action_type_reload_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_rerun_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_rerun_s) == F_equal_to) {
       return control_action_type_rerun_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_restart_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_restart_s) == F_equal_to) {
       return control_action_type_restart_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_resume_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_resume_s) == F_equal_to) {
       return control_action_type_resume_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_shutdown_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_shutdown_s) == F_equal_to) {
       return control_action_type_shutdown_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_start_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_start_s) == F_equal_to) {
       return control_action_type_start_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_stop_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_stop_s) == F_equal_to) {
       return control_action_type_stop_e;
     }
 
-    if (fl_string_dynamic_compare(action, control_thaw_s) == F_equal_to) {
+    if (f_compare_dynamic(action, control_thaw_s) == F_equal_to) {
       return control_action_type_thaw_e;
     }
 
@@ -136,15 +136,15 @@ extern "C" {
 #ifndef _di_control_payload_type_identify_
   uint8_t control_payload_type_identify(const f_string_static_t payload) {
 
-    if (fl_string_dynamic_compare(payload, control_controller_s) == F_equal_to) {
+    if (f_compare_dynamic(payload, control_controller_s) == F_equal_to) {
       return control_payload_type_controller_e;
     }
 
-    if (fl_string_dynamic_compare(payload, control_error_s) == F_equal_to) {
+    if (f_compare_dynamic(payload, control_error_s) == F_equal_to) {
       return control_payload_type_error_e;
     }
 
-    if (fl_string_dynamic_compare(payload, control_init_s) == F_equal_to) {
+    if (f_compare_dynamic(payload, control_init_s) == F_equal_to) {
       return control_payload_type_init_e;
     }
 
index 0c6407b086c946b6730d0c046358c303a4b4b59b..19c7fff25ba6df5b6d28041c4b0bc57c362b2154 100644 (file)
@@ -23,6 +23,7 @@
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/directory.h>
@@ -31,6 +32,7 @@
 #include <fll/level_0/path.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 #include <fll/level_0/socket.h>
 #include <fll/level_0/status_string.h>
@@ -39,7 +41,6 @@
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 4cb5bcee9c235bb49c78f00c057c2affef974d72..b4ff763cfc4f0c5d1f36858534b397a1ac68b277 100644 (file)
@@ -28,7 +28,7 @@ extern "C" {
         }
 
         if (main->parameters.remaining.used > 3) {
-          if (fl_string_dynamic_compare(control_at_s, data->argv[main->parameters.remaining.array[3]]) == F_equal_to) {
+          if (f_compare_dynamic(control_at_s, data->argv[main->parameters.remaining.array[3]]) == F_equal_to) {
             if (main->parameters.remaining.used < 5) {
               control_print_error_parameter_action_rule_too_few_with(main, data->argv[main->parameters.remaining.array[0]], control_at_s);
 
@@ -41,14 +41,14 @@ extern "C" {
               return F_status_set_error(F_parameter);
             }
           }
-          else if (fl_string_dynamic_compare(control_in_s, data->argv[main->parameters.remaining.array[3]]) == F_equal_to) {
+          else if (f_compare_dynamic(control_in_s, data->argv[main->parameters.remaining.array[3]]) == F_equal_to) {
             if (main->parameters.remaining.used < 6) {
               control_print_error_parameter_action_rule_too_few_with(main, data->argv[main->parameters.remaining.array[0]], control_in_s);
 
               return F_status_set_error(F_parameter);
             }
           }
-          else if (fl_string_dynamic_compare(control_now_s, data->argv[main->parameters.remaining.array[3]]) == F_equal_to) {
+          else if (f_compare_dynamic(control_now_s, data->argv[main->parameters.remaining.array[3]]) == F_equal_to) {
             if (main->parameters.remaining.used > 4) {
               control_print_error_parameter_action_rule_too_many_with(main, data->argv[main->parameters.remaining.array[0]], control_now_s);
 
@@ -92,7 +92,7 @@ extern "C" {
           return F_status_set_error(F_parameter);
         }
 
-        if (fl_string_dynamic_compare(control_at_s, data->argv[main->parameters.remaining.array[1]]) == F_equal_to) {
+        if (f_compare_dynamic(control_at_s, data->argv[main->parameters.remaining.array[1]]) == F_equal_to) {
           if (main->parameters.remaining.used < 3) {
             control_print_error_parameter_action_rule_too_few_with(main, data->argv[main->parameters.remaining.array[0]], control_at_s);
 
@@ -105,14 +105,14 @@ extern "C" {
             return F_status_set_error(F_parameter);
           }
         }
-        else if (fl_string_dynamic_compare(control_in_s, data->argv[main->parameters.remaining.array[1]]) == F_equal_to) {
+        else if (f_compare_dynamic(control_in_s, data->argv[main->parameters.remaining.array[1]]) == F_equal_to) {
           if (main->parameters.remaining.used < 4) {
             control_print_error_parameter_action_rule_too_few_with(main, data->argv[main->parameters.remaining.array[0]], control_in_s);
 
             return F_status_set_error(F_parameter);
           }
         }
-        else if (fl_string_dynamic_compare(control_now_s, data->argv[main->parameters.remaining.array[1]]) == F_equal_to) {
+        else if (f_compare_dynamic(control_now_s, data->argv[main->parameters.remaining.array[1]]) == F_equal_to) {
           if (main->parameters.remaining.used > 2) {
             control_print_error_parameter_action_rule_too_many_with(main, data->argv[main->parameters.remaining.array[0]], control_now_s);
 
@@ -349,7 +349,7 @@ extern "C" {
 
         for (; i < data->cache.packet_objects.used; ++i) {
 
-          if (fl_string_dynamic_partial_compare_string(f_fss_header_s.string, data->cache.large, f_fss_header_s.used, data->cache.packet_objects.array[i]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(f_fss_header_s.string, data->cache.large, f_fss_header_s.used, data->cache.packet_objects.array[i]) == F_equal_to) {
 
             // The FSS-000E (Payload) standard does not prohibit multiple "header", but such cases are not supported by the controller and the control programs.
             if (content_header) {
@@ -360,7 +360,7 @@ extern "C" {
 
             content_header = &data->cache.packet_contents.array[i];
           }
-          else if (fl_string_dynamic_partial_compare_string(f_fss_payload_s.string, data->cache.large, f_fss_payload_s.used, data->cache.packet_objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(f_fss_payload_s.string, data->cache.large, f_fss_payload_s.used, data->cache.packet_objects.array[i]) == F_equal_to) {
 
             // Only a single "payload" is supported by the FSS-000E (Payload) standard.
             if (content_payload) {
@@ -429,7 +429,7 @@ extern "C" {
 
         for (i = 0; i < data->cache.header_objects.used; ++i) {
 
-          if (fl_string_dynamic_partial_compare_string(control_action_s.string, data->cache.large, control_action_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(control_action_s.string, data->cache.large, control_action_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
             if (!(found & 0x1)) {
               const f_array_length_t action_length = (data->cache.header_contents.array[i].array[0].stop - data->cache.header_contents.array[i].array[0].start) + 1;
               char action_string[action_length + 1];
@@ -454,7 +454,7 @@ extern "C" {
               control_print_warning_packet_header_duplicate_object(main, control_action_s);
             }
           }
-          else if (fl_string_dynamic_partial_compare_string(control_length_s.string, data->cache.large, control_length_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(control_length_s.string, data->cache.large, control_length_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
             if (!(found & 0x2)) {
               found |= 0x2;
               number = 0;
@@ -481,7 +481,7 @@ extern "C" {
               control_print_warning_packet_header_duplicate_object(main, control_length_s);
             }
           }
-          else if (fl_string_dynamic_partial_compare_string(control_status_s.string, data->cache.large, control_status_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(control_status_s.string, data->cache.large, control_status_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
             if (!(found & 0x4)) {
               found |= 0x4;
               number = 0;
@@ -530,16 +530,16 @@ extern "C" {
               control_print_warning_packet_header_duplicate_object(main, control_length_s);
             }
           }
-          else if (fl_string_dynamic_partial_compare_string(control_type_s.string, data->cache.large, control_type_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(control_type_s.string, data->cache.large, control_type_s.used, data->cache.header_objects.array[i]) == F_equal_to) {
             if (!(found & 0x8)) {
               found |= 0x8;
 
               control_print_debug_packet_header_object_and_content(main, control_type_s, data->cache.large, data->cache.header_contents.array[i].array[0]);
 
-              if (fl_string_dynamic_partial_compare_string(control_controller_s.string, data->cache.large, control_controller_s.used, data->cache.header_contents.array[i].array[0]) == F_equal_to) {
+              if (f_compare_dynamic_partial_string(control_controller_s.string, data->cache.large, control_controller_s.used, data->cache.header_contents.array[i].array[0]) == F_equal_to) {
                 header->type = control_payload_type_controller_e;
               }
-              else if (fl_string_dynamic_partial_compare_string(control_error_s.string, data->cache.large, control_error_s.used, data->cache.header_contents.array[i].array[0]) == F_equal_to) {
+              else if (f_compare_dynamic_partial_string(control_error_s.string, data->cache.large, control_error_s.used, data->cache.header_contents.array[i].array[0]) == F_equal_to) {
                 header->type = control_payload_type_error_e;
               }
               else {
@@ -694,7 +694,7 @@ extern "C" {
 
             range.stop = parameter_names[j].used - 1;
 
-            if (fl_string_dynamic_partial_compare(parameter_names[j], data->cache.large, range, objects.array[i]) == F_equal_to) {
+            if (f_compare_dynamic_partial(parameter_names[j], data->cache.large, range, objects.array[i]) == F_equal_to) {
               parameter_hass[j] = F_true;
               parameter_ats[j] = i;
 
index 4c3de2230f4fd594cba90baf16ed7fbb22eb5668..ec285bbead931cbd5affc56b637f43737b2ba55b 100644 (file)
@@ -7,19 +7,21 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_file
 f_fss
+f_parse
 f_path
 f_pipe
 f_print
+f_rip
 f_signal
 f_socket
 f_status_string
 
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_fss
index 4d6d757096e85efcf91d2a7d1abafaabb942035c..9cb90d70e53d41f98a617c4d68d5723e1fb3786b 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_fss -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_socket -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_fss -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_socket -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 177abe8a1bff7c13b694a1604292d6873f9a9c72..cd393f36639beb14002b7b5eed9c74ae8259a51f 100644 (file)
@@ -36,15 +36,15 @@ extern "C" {
 #ifndef _di_controller_control_payload_type_identify_
   uint8_t controller_control_payload_type_identify(const f_string_static_t payload) {
 
-    if (fl_string_dynamic_compare(payload, controller_controller_s) == F_equal_to) {
+    if (f_compare_dynamic(payload, controller_controller_s) == F_equal_to) {
       return controller_control_payload_type_controller_e;
     }
 
-    if (fl_string_dynamic_compare(payload, controller_error_s) == F_equal_to) {
+    if (f_compare_dynamic(payload, controller_error_s) == F_equal_to) {
       return controller_control_payload_type_error_e;
     }
 
-    if (fl_string_dynamic_compare(payload, controller_init_s) == F_equal_to) {
+    if (f_compare_dynamic(payload, controller_init_s) == F_equal_to) {
       return controller_control_payload_type_init_e;
     }
 
@@ -73,75 +73,75 @@ extern "C" {
 #ifndef _di_controller_entry_action_type_identify_
   uint8_t controller_entry_action_type_identify(const f_string_static_t action) {
 
-    if (fl_string_dynamic_compare(action, controller_consider_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_consider_s) == F_equal_to) {
       return controller_entry_action_type_consider_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_execute_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_execute_s) == F_equal_to) {
       return controller_entry_action_type_execute_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_failsafe_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_failsafe_s) == F_equal_to) {
       return controller_entry_action_type_failsafe_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_freeze_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_freeze_s) == F_equal_to) {
       return controller_entry_action_type_freeze_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_item_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_item_s) == F_equal_to) {
       return controller_entry_action_type_item_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_kexec_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_kexec_s) == F_equal_to) {
       return controller_entry_action_type_kexec_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_kill_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_kill_s) == F_equal_to) {
       return controller_entry_action_type_kill_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_pause_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_pause_s) == F_equal_to) {
       return controller_entry_action_type_pause_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_ready_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_ready_s) == F_equal_to) {
       return controller_entry_action_type_ready_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_reboot_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_reboot_s) == F_equal_to) {
       return controller_entry_action_type_reboot_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_reload_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_reload_s) == F_equal_to) {
       return controller_entry_action_type_reload_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_restart_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_restart_s) == F_equal_to) {
       return controller_entry_action_type_restart_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_resume_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_resume_s) == F_equal_to) {
       return controller_entry_action_type_resume_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_shutdown_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_shutdown_s) == F_equal_to) {
       return controller_entry_action_type_shutdown_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_start_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_start_s) == F_equal_to) {
       return controller_entry_action_type_start_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_stop_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_stop_s) == F_equal_to) {
       return controller_entry_action_type_stop_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_thaw_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_thaw_s) == F_equal_to) {
       return controller_entry_action_type_thaw_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_timeout_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_timeout_s) == F_equal_to) {
       return controller_entry_action_type_timeout_e;
     }
 
@@ -229,63 +229,63 @@ extern "C" {
 #ifndef _di_controller_rule_action_type_identify_
   uint8_t controller_rule_action_type_identify(const f_string_static_t action) {
 
-    if (fl_string_dynamic_compare(action, controller_freeze_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_freeze_s) == F_equal_to) {
       return controller_rule_action_type_freeze_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_group_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_group_s) == F_equal_to) {
       return controller_rule_action_type_group_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_kill_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_kill_s) == F_equal_to) {
       return controller_rule_action_type_kill_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_pause_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_pause_s) == F_equal_to) {
       return controller_rule_action_type_pause_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_pid_file_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_pid_file_s) == F_equal_to) {
       return controller_rule_action_type_pid_file_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_reload_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_reload_s) == F_equal_to) {
       return controller_rule_action_type_reload_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_rerun_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_rerun_s) == F_equal_to) {
       return controller_rule_action_type_rerun_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_restart_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_restart_s) == F_equal_to) {
       return controller_rule_action_type_restart_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_resume_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_resume_s) == F_equal_to) {
       return controller_rule_action_type_resume_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_start_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_start_s) == F_equal_to) {
       return controller_rule_action_type_start_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_stop_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_stop_s) == F_equal_to) {
       return controller_rule_action_type_stop_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_start_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_start_s) == F_equal_to) {
       return controller_rule_action_type_start_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_thaw_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_thaw_s) == F_equal_to) {
       return controller_rule_action_type_thaw_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_user_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_user_s) == F_equal_to) {
       return controller_rule_action_type_user_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_with_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_with_s) == F_equal_to) {
       return controller_rule_action_type_with_e;
     }
 
@@ -347,39 +347,39 @@ extern "C" {
 #ifndef _di_controller_rule_action_execute_type_identify_
   uint8_t controller_rule_action_execute_type_identify(const f_string_static_t action) {
 
-    if (fl_string_dynamic_compare(action, controller_freeze_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_freeze_s) == F_equal_to) {
       return controller_rule_action_execute_type_freeze_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_kill_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_kill_s) == F_equal_to) {
       return controller_rule_action_execute_type_kill_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_pause_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_pause_s) == F_equal_to) {
       return controller_rule_action_execute_type_pause_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_reload_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_reload_s) == F_equal_to) {
       return controller_rule_action_execute_type_reload_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_restart_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_restart_s) == F_equal_to) {
       return controller_rule_action_execute_type_restart_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_resume_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_resume_s) == F_equal_to) {
       return controller_rule_action_execute_type_resume_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_start_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_start_s) == F_equal_to) {
       return controller_rule_action_execute_type_start_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_stop_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_stop_s) == F_equal_to) {
       return controller_rule_action_execute_type_stop_e;
     }
 
-    if (fl_string_dynamic_compare(action, controller_thaw_s) == F_equal_to) {
+    if (f_compare_dynamic(action, controller_thaw_s) == F_equal_to) {
       return controller_rule_action_execute_type_thaw_e;
     }
 
@@ -426,23 +426,23 @@ extern "C" {
 #ifndef _di_controller_rule_item_type_identify_
   uint8_t controller_rule_item_type_identify(const f_string_static_t item) {
 
-    if (fl_string_dynamic_compare(item, controller_command_s) == F_equal_to) {
+    if (f_compare_dynamic(item, controller_command_s) == F_equal_to) {
       return controller_rule_item_type_command_e;
     }
 
-    if (fl_string_dynamic_compare(item, controller_script_s) == F_equal_to) {
+    if (f_compare_dynamic(item, controller_script_s) == F_equal_to) {
       return controller_rule_item_type_script_e;
     }
 
-    if (fl_string_dynamic_compare(item, controller_service_s) == F_equal_to) {
+    if (f_compare_dynamic(item, controller_service_s) == F_equal_to) {
       return controller_rule_item_type_service_e;
     }
 
-    if (fl_string_dynamic_compare(item, controller_settings_s) == F_equal_to) {
+    if (f_compare_dynamic(item, controller_settings_s) == F_equal_to) {
       return controller_rule_item_type_settings_e;
     }
 
-    if (fl_string_dynamic_compare(item, controller_utility_s) == F_equal_to) {
+    if (f_compare_dynamic(item, controller_utility_s) == F_equal_to) {
       return controller_rule_item_type_utility_e;
     }
 
@@ -477,67 +477,67 @@ extern "C" {
 #ifndef _di_controller_rule_setting_limit_type_identify_
   uint8_t controller_rule_setting_limit_type_identify(const f_string_static_t limit) {
 
-    if (fl_string_dynamic_compare(limit, controller_as_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_as_s) == F_equal_to) {
       return controller_resource_limit_type_as_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_core_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_core_s) == F_equal_to) {
       return controller_resource_limit_type_core_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_cpu_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_cpu_s) == F_equal_to) {
       return controller_resource_limit_type_cpu_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_data_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_data_s) == F_equal_to) {
       return controller_resource_limit_type_data_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_fsize_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_fsize_s) == F_equal_to) {
       return controller_resource_limit_type_fsize_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_locks_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_locks_s) == F_equal_to) {
       return controller_resource_limit_type_locks_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_memlock_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_memlock_s) == F_equal_to) {
       return controller_resource_limit_type_memlock_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_msgqueue_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_msgqueue_s) == F_equal_to) {
       return controller_resource_limit_type_msgqueue_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_nice_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_nice_s) == F_equal_to) {
       return controller_resource_limit_type_nice_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_nofile_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_nofile_s) == F_equal_to) {
       return controller_resource_limit_type_nofile_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_nproc_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_nproc_s) == F_equal_to) {
       return controller_resource_limit_type_nproc_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_rss_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_rss_s) == F_equal_to) {
       return controller_resource_limit_type_rss_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_rtprio_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_rtprio_s) == F_equal_to) {
       return controller_resource_limit_type_rtprio_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_rttime_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_rttime_s) == F_equal_to) {
       return controller_resource_limit_type_rttime_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_sigpending_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_sigpending_s) == F_equal_to) {
       return controller_resource_limit_type_sigpending_e;
     }
 
-    if (fl_string_dynamic_compare(limit, controller_stack_s) == F_equal_to) {
+    if (f_compare_dynamic(limit, controller_stack_s) == F_equal_to) {
       return controller_resource_limit_type_stack_e;
     }
 
index 12b3f1972f38562cb28a0fb19e453372226ae27b..0faa89f1d45c789b5c7d0d646668191c5ccad845 100644 (file)
@@ -39,6 +39,7 @@
 #include <fll/level_0/account.h>
 #include <fll/level_0/capability.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/control_group.h>
 #include <fll/level_0/directory.h>
@@ -50,6 +51,7 @@
 #include <fll/level_0/path.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 #include <fll/level_0/socket.h>
 #include <fll/level_0/status_string.h>
@@ -61,7 +63,6 @@
 #include <fll/level_1/iki.h>
 #include <fll/level_1/path.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/control_group.h>
index 18946da16c10ab7ecbce0907466a5ae16b4600da..0936fb4e4eaef827f81124ceb4f8e9d9cca17df8 100644 (file)
@@ -305,7 +305,7 @@ extern "C" {
       if (F_status_set_fine(status) == F_number) {
         cache->action.generic.used = 0;
 
-        status = fl_string_dynamic_partial_rip_nulless(buffer, range, &cache->action.generic);
+        status = f_rip_dynamic_partial_nulless(buffer, range, &cache->action.generic);
         if (F_status_is_error(status)) return status;
 
         status = f_account_id_by_name(cache->action.generic, id);
@@ -340,7 +340,7 @@ extern "C" {
       if (F_status_set_fine(status) == F_number) {
         cache->action.generic.used = 0;
 
-        status = fl_string_dynamic_partial_rip_nulless(buffer, range, &cache->action.generic);
+        status = f_rip_dynamic_partial_nulless(buffer, range, &cache->action.generic);
         if (F_status_is_error(status)) return status;
 
         status = f_account_group_id_by_name(cache->action.generic, id);
@@ -375,7 +375,7 @@ extern "C" {
     if (destination->used >= setting->path_current.used) {
       const f_string_range_t range = macro_f_string_range_t_initialize2(setting->path_current.used);
 
-      if (fl_string_dynamic_partial_compare_string(destination->string, setting->path_current, destination->used, range) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(destination->string, setting->path_current, destination->used, range) == F_equal_to) {
         f_array_length_t length = destination->used - setting->path_current.used;
 
         if (length) {
index 84bbd7270cb1ccd5bf40dbdc2151f8e239cff50b..7004d4a32d0ae21cda8201ae2a9eb34d290443d7 100644 (file)
@@ -158,11 +158,11 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_account_id_by_name().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_partial_rip_nulless().
+ *   Errors (with error bit) from: f_rip_dynamic_partial_nulless().
  *
  * @see f_account_id_by_name()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_partial_rip_nulless()
+ * @see f_rip_dynamic_partial_nulless()
  */
 #ifndef _di_controller_get_id_user_
   f_status_t controller_get_id_user(const f_string_static_t buffer, const f_string_range_t range, controller_cache_t * const cache, uid_t * const id) F_attribute_visibility_internal_d;
@@ -187,11 +187,11 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_account_group_id_by_name().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_partial_rip_nulless().
+ *   Errors (with error bit) from: f_rip_dynamic_partial_nulless().
  *
  * @see f_account_group_id_by_name()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_partial_rip_nulless()
+ * @see f_rip_dynamic_partial_nulless()
  */
 #ifndef _di_controller_get_id_group_
   f_status_t controller_get_id_group(const f_string_static_t buffer, const f_string_range_t range, controller_cache_t * const cache, gid_t * const id) F_attribute_visibility_internal_d;
index 7b5a62ae89da13fa37edd8a6f46437043562bc38..d0d470794fd361dfd8e4f0c6242686cc3d886f68 100644 (file)
@@ -159,57 +159,57 @@ extern "C" {
 
       action->line = ++cache->action.line_action;
 
-      status = fl_string_dynamic_partial_rip_nulless(cache->buffer_file, cache->object_actions.array[i], &cache->action.name_action);
+      status = f_rip_dynamic_partial_nulless(cache->buffer_file, cache->object_actions.array[i], &cache->action.name_action);
 
       if (F_status_is_error(status)) {
-        controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true, global.thread);
+        controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true, global.thread);
 
         break;
       }
 
-      if (fl_string_dynamic_compare(controller_consider_s, cache->action.name_action) == F_equal_to) {
+      if (f_compare_dynamic(controller_consider_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_consider_e;
       }
-      else if (fl_string_dynamic_compare(controller_execute_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_execute_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_execute_e;
       }
-      else if (fl_string_dynamic_compare(controller_failsafe_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_failsafe_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_failsafe_e;
       }
-      else if (fl_string_dynamic_compare(controller_freeze_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_freeze_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_freeze_e;
       }
-      else if (fl_string_dynamic_compare(controller_item_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_item_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_item_e;
       }
-      else if (fl_string_dynamic_compare(controller_kill_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_kill_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_kill_e;
       }
-      else if (fl_string_dynamic_compare(controller_pause_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_pause_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_pause_e;
       }
-      else if (fl_string_dynamic_compare(controller_ready_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_ready_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_ready_e;
       }
-      else if (fl_string_dynamic_compare(controller_reload_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_reload_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_reload_e;
       }
-      else if (fl_string_dynamic_compare(controller_restart_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_restart_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_restart_e;
       }
-      else if (fl_string_dynamic_compare(controller_resume_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_resume_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_resume_e;
       }
-      else if (fl_string_dynamic_compare(controller_start_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_start_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_start_e;
       }
-      else if (fl_string_dynamic_compare(controller_stop_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_stop_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_stop_e;
       }
-      else if (fl_string_dynamic_compare(controller_thaw_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_thaw_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_thaw_e;
       }
-      else if (fl_string_dynamic_compare(controller_timeout_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_timeout_s, cache->action.name_action) == F_equal_to) {
         actions->array[actions->used].type = controller_entry_action_type_timeout_e;
       }
       else {
@@ -399,7 +399,7 @@ extern "C" {
                 }
               }
               else {
-                if (fl_string_dynamic_compare(action->parameters.array[1], cache->buffer_path) == F_equal_to_not) {
+                if (f_compare_dynamic(action->parameters.array[1], cache->buffer_path) == F_equal_to_not) {
                   if (global.main->error.verbosity > f_console_verbosity_quiet_e) {
                     f_file_stream_lock(global.main->error.to);
 
@@ -434,13 +434,13 @@ extern "C" {
 
             for (j = 2; j < action->parameters.used; ++j) {
 
-              if (fl_string_dynamic_compare(controller_asynchronous_s, action->parameters.array[j]) == F_equal_to) {
+              if (f_compare_dynamic(controller_asynchronous_s, action->parameters.array[j]) == F_equal_to) {
                 action->code |= controller_entry_rule_code_asynchronous_d;
               }
-              else if (fl_string_dynamic_compare(controller_require_s, action->parameters.array[j]) == F_equal_to) {
+              else if (f_compare_dynamic(controller_require_s, action->parameters.array[j]) == F_equal_to) {
                 action->code |= controller_entry_rule_code_require_d;
               }
-              else if (fl_string_dynamic_compare(controller_wait_s, action->parameters.array[j]) == F_equal_to) {
+              else if (f_compare_dynamic(controller_wait_s, action->parameters.array[j]) == F_equal_to) {
                 action->code |= controller_entry_rule_code_wait_d;
               }
               else {
@@ -471,7 +471,7 @@ extern "C" {
             } // for
           }
           else if (action->type == controller_entry_action_type_failsafe_e || action->type == controller_entry_action_type_item_e) {
-            if (fl_string_dynamic_compare(controller_main_s, action->parameters.array[0]) == F_equal_to) {
+            if (f_compare_dynamic(controller_main_s, action->parameters.array[0]) == F_equal_to) {
               action->status = F_status_set_error(F_support_not);
 
               if (F_status_is_error_not(status_action)) {
@@ -491,13 +491,13 @@ extern "C" {
           }
           else if (action->type == controller_entry_action_type_timeout_e) {
 
-            if (fl_string_dynamic_compare(controller_kill_s, action->parameters.array[0]) == F_equal_to) {
+            if (f_compare_dynamic(controller_kill_s, action->parameters.array[0]) == F_equal_to) {
               action->code = controller_entry_timeout_code_kill_d;
             }
-            else if (fl_string_dynamic_compare(controller_start_s, action->parameters.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic(controller_start_s, action->parameters.array[0]) == F_equal_to) {
               action->code = controller_entry_timeout_code_start_d;
             }
-            else if (fl_string_dynamic_compare(controller_stop_s, action->parameters.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic(controller_stop_s, action->parameters.array[0]) == F_equal_to) {
               action->code = controller_entry_timeout_code_stop_d;
             }
             else {
@@ -568,7 +568,7 @@ extern "C" {
           }
           else if (action->type == controller_entry_action_type_ready_e) {
             if (action->parameters.used) {
-              if (fl_string_dynamic_compare(controller_wait_s, action->parameters.array[0]) == F_equal_to) {
+              if (f_compare_dynamic(controller_wait_s, action->parameters.array[0]) == F_equal_to) {
                 action->code |= controller_entry_rule_code_wait_d;
               }
               else {
@@ -693,17 +693,17 @@ extern "C" {
           error_has = F_false;
 
           // "main" is not allowed to be used for an "item" and "setting" is not an executable "item".
-          if (fl_string_dynamic_compare(controller_main_s, actions->array[cache->ats.array[at_j]].parameters.array[0]) == F_equal_to) {
+          if (f_compare_dynamic(controller_main_s, actions->array[cache->ats.array[at_j]].parameters.array[0]) == F_equal_to) {
             continue;
           }
-          else if (fl_string_dynamic_compare(controller_settings_s, actions->array[cache->ats.array[at_j]].parameters.array[0]) == F_equal_to) {
+          else if (f_compare_dynamic(controller_settings_s, actions->array[cache->ats.array[at_j]].parameters.array[0]) == F_equal_to) {
             continue;
           }
 
           // Walk though each items and check to see if the item actually exists.
           for (i = 1; i < entry->items.used && controller_thread_is_enabled(is_entry, global.thread); ++i) {
 
-            if (fl_string_dynamic_compare(entry->items.array[i].name, actions->array[cache->ats.array[at_j]].parameters.array[0]) == F_equal_to) {
+            if (f_compare_dynamic(entry->items.array[i].name, actions->array[cache->ats.array[at_j]].parameters.array[0]) == F_equal_to) {
 
               // Check to see if "i" is already in the stack (to prevent recursion) (skipping main).
               for (j = 2; j < cache->ats.used; j += 2) {
@@ -1678,7 +1678,7 @@ extern "C" {
 
           for (j = (code & 0x1) ? 1 : 0; j < entry->items.used; ++j) {
 
-            if (fl_string_dynamic_compare(entry->items.array[j].name, cache->action.name_item) == F_equal_to) {
+            if (f_compare_dynamic(entry->items.array[j].name, cache->action.name_item) == F_equal_to) {
               if (global.main->warning.verbosity == f_console_verbosity_debug_e) {
                 controller_lock_print(global.main->warning.to, global.thread);
 
@@ -1701,7 +1701,7 @@ extern "C" {
 
           range = &cache->content_items.array[i].array[0];
 
-          if (fl_string_dynamic_compare(controller_main_s, cache->action.name_item) == F_equal_to) {
+          if (f_compare_dynamic(controller_main_s, cache->action.name_item) == F_equal_to) {
             code |= 0x1;
 
             at = 0;
@@ -1710,7 +1710,7 @@ extern "C" {
               entry->items.used = 1;
             }
           }
-          else if (fl_string_dynamic_compare(controller_settings_s, cache->action.name_item) == F_equal_to) {
+          else if (f_compare_dynamic(controller_settings_s, cache->action.name_item) == F_equal_to) {
             status = controller_entry_settings_read(global, is_entry, *range, cache);
 
             continue;
@@ -1802,7 +1802,7 @@ extern "C" {
 
                   for (k = 0; k < entry->items.used; ++k) {
 
-                    if (fl_string_dynamic_compare(action->parameters.array[0], entry->items.array[k].name) == F_equal_to) {
+                    if (f_compare_dynamic(action->parameters.array[0], entry->items.array[k].name) == F_equal_to) {
                       if (missing & 0x1) {
                         missing -= 0x1;
                       }
@@ -1922,15 +1922,15 @@ extern "C" {
       ++cache->action.line_action;
       cache->action.name_action.used = 0;
 
-      status = fl_string_dynamic_partial_rip_nulless(cache->buffer_file, cache->object_actions.array[i], &cache->action.name_action);
+      status = f_rip_dynamic_partial_nulless(cache->buffer_file, cache->object_actions.array[i], &cache->action.name_action);
 
       if (F_status_is_error(status)) {
-        controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true, global.thread);
+        controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true, global.thread);
 
         break;
       }
 
-      if (is_entry && fl_string_dynamic_compare(controller_control_s, cache->action.name_action) == F_equal_to) {
+      if (is_entry && f_compare_dynamic(controller_control_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used < 1 || cache->content_actions.array[i].used > 2) {
           controller_entry_settings_read_print_setting_requires_between(global, is_entry, *cache, 1, 2);
 
@@ -1938,7 +1938,7 @@ extern "C" {
         }
 
         if (cache->content_actions.array[i].used == 2) {
-          if (fl_string_dynamic_partial_compare_string(controller_readonly_s.string, cache->buffer_file, controller_readonly_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(controller_readonly_s.string, cache->buffer_file, controller_readonly_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
             global.setting->control.flag |= controller_control_flag_readonly_e;
           }
           else {
@@ -1970,10 +1970,10 @@ extern "C" {
         cache->action.generic.used = 0;
         global.setting->path_control.used = 0;
 
-        status = fl_string_dynamic_partial_rip_nulless(cache->buffer_file, cache->content_actions.array[i].array[0], &cache->action.generic);
+        status = f_rip_dynamic_partial_nulless(cache->buffer_file, cache->content_actions.array[i].array[0], &cache->action.generic);
 
         if (F_status_is_error(status)) {
-          controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true, global.thread);
+          controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true, global.thread);
 
           break;
         }
@@ -1988,7 +1988,7 @@ extern "C" {
           continue;
         }
       }
-      else if (is_entry && fl_string_dynamic_compare(controller_control_group_s, cache->action.name_action) == F_equal_to) {
+      else if (is_entry && f_compare_dynamic(controller_control_group_s, cache->action.name_action) == F_equal_to) {
         gid_t number = 0;
 
         status = controller_get_id_group(cache->buffer_file, cache->content_actions.array[i].array[0], cache, &number);
@@ -2015,17 +2015,17 @@ extern "C" {
         global.setting->control.group = number;
         global.setting->control.flag |= controller_control_flag_has_group_e;
       }
-      else if (is_entry && fl_string_dynamic_compare(controller_control_mode_s, cache->action.name_action) == F_equal_to) {
+      else if (is_entry && f_compare_dynamic(controller_control_mode_s, cache->action.name_action) == F_equal_to) {
         mode_t mode = 0;
         uint8_t replace = 0;
         f_file_mode_t mode_file = f_file_mode_t_initialize;
 
         cache->action.generic.used = 0;
 
-        status = fl_string_dynamic_partial_rip_nulless(cache->buffer_file, cache->content_actions.array[i].array[0], &cache->action.generic);
+        status = f_rip_dynamic_partial_nulless(cache->buffer_file, cache->content_actions.array[i].array[0], &cache->action.generic);
 
         if (F_status_is_error(status)) {
-          controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true, global.thread);
+          controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true, global.thread);
 
           break;
         }
@@ -2049,7 +2049,7 @@ extern "C" {
         global.setting->control.mode = mode;
         global.setting->control.flag |= controller_control_flag_has_mode_e;
       }
-      else if (is_entry && fl_string_dynamic_compare(controller_control_user_s, cache->action.name_action) == F_equal_to) {
+      else if (is_entry && f_compare_dynamic(controller_control_user_s, cache->action.name_action) == F_equal_to) {
         uid_t number = 0;
 
         status = controller_get_id_user(cache->buffer_file, cache->content_actions.array[i].array[0], cache, &number);
@@ -2076,7 +2076,7 @@ extern "C" {
         global.setting->control.user = number;
         global.setting->control.flag |= controller_control_flag_has_user_e;
       }
-      else if (fl_string_dynamic_compare(controller_define_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_define_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 2) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 2);
 
@@ -2091,20 +2091,20 @@ extern "C" {
           continue;
         }
       }
-      else if (is_entry && fl_string_dynamic_compare(controller_mode_s, cache->action.name_action) == F_equal_to) {
+      else if (is_entry && f_compare_dynamic(controller_mode_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 1) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 1);
 
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_service_s.string, cache->buffer_file, controller_service_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_service_s.string, cache->buffer_file, controller_service_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           global.setting->mode = controller_setting_mode_service_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_helper_s.string, cache->buffer_file, controller_helper_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_helper_s.string, cache->buffer_file, controller_helper_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           global.setting->mode = controller_setting_mode_helper_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_program_s.string, cache->buffer_file, controller_program_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_program_s.string, cache->buffer_file, controller_program_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           global.setting->mode = controller_setting_mode_program_e;
         }
         else {
@@ -2113,7 +2113,7 @@ extern "C" {
           continue;
         }
       }
-      else if (fl_string_dynamic_compare(controller_parameter_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_parameter_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 2) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 2);
 
@@ -2128,20 +2128,20 @@ extern "C" {
           continue;
         }
       }
-      else if (fl_string_dynamic_compare(controller_pid_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_pid_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 1) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 1);
 
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_disable_s.string, cache->buffer_file, controller_disable_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_disable_s.string, cache->buffer_file, controller_disable_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->pid = controller_entry_pid_disable_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_ready_s.string, cache->buffer_file, controller_ready_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_ready_s.string, cache->buffer_file, controller_ready_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->pid = controller_entry_pid_ready_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_require_s.string, cache->buffer_file, controller_require_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_require_s.string, cache->buffer_file, controller_require_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->pid = controller_entry_pid_require_e;
         }
         else {
@@ -2150,7 +2150,7 @@ extern "C" {
           continue;
         }
       }
-      else if (is_entry && fl_string_dynamic_compare(controller_pid_file_s, cache->action.name_action) == F_equal_to) {
+      else if (is_entry && f_compare_dynamic(controller_pid_file_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 1) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 1);
 
@@ -2163,10 +2163,10 @@ extern "C" {
         else {
           cache->action.generic.used = 0;
 
-          status = fl_string_dynamic_partial_rip_nulless(cache->buffer_file, cache->content_actions.array[i].array[0], &cache->action.generic);
+          status = f_rip_dynamic_partial_nulless(cache->buffer_file, cache->content_actions.array[i].array[0], &cache->action.generic);
 
           if (F_status_is_error(status)) {
-            controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true, global.thread);
+            controller_entry_print_error(is_entry, global.main->error, cache->action, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true, global.thread);
 
             continue;
           }
@@ -2182,17 +2182,17 @@ extern "C" {
           }
         }
       }
-      else if (fl_string_dynamic_compare(controller_session_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_session_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 1) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 1);
 
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_new_s.string, cache->buffer_file, controller_new_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_new_s.string, cache->buffer_file, controller_new_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->session = controller_entry_session_new_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_same_s.string, cache->buffer_file, controller_same_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_same_s.string, cache->buffer_file, controller_same_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->session = controller_entry_session_same_e;
         }
         else {
@@ -2201,17 +2201,17 @@ extern "C" {
           continue;
         }
       }
-      else if (fl_string_dynamic_compare(controller_show_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_show_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used != 1) {
           controller_entry_settings_read_print_setting_requires_exactly(global, is_entry, *cache, 1);
 
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_normal_s.string, cache->buffer_file, controller_normal_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_normal_s.string, cache->buffer_file, controller_normal_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->show = controller_entry_show_normal_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_init_s.string, cache->buffer_file, controller_init_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_init_s.string, cache->buffer_file, controller_init_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           entry->show = controller_entry_show_init_e;
         }
         else {
@@ -2220,7 +2220,7 @@ extern "C" {
           continue;
         }
       }
-      else if (fl_string_dynamic_compare(controller_timeout_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_timeout_s, cache->action.name_action) == F_equal_to) {
         if (cache->content_actions.array[i].used < 1 || cache->content_actions.array[i].used > 2) {
           controller_entry_settings_read_print_setting_requires_between(global, is_entry, *cache, 1, 2);
 
@@ -2229,7 +2229,7 @@ extern "C" {
 
         f_number_unsigned_t *time = 0;
 
-        if (fl_string_dynamic_partial_compare_string(controller_exit_s.string, cache->buffer_file, controller_exit_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_exit_s.string, cache->buffer_file, controller_exit_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           if (cache->content_actions.array[i].used == 1) {
             entry->flag |= controller_entry_flag_timeout_exit_no_e;
 
@@ -2242,7 +2242,7 @@ extern "C" {
 
           time = &entry->timeout_exit;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_kill_s.string, cache->buffer_file, controller_kill_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_kill_s.string, cache->buffer_file, controller_kill_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           if (cache->content_actions.array[i].used == 1) {
             entry->flag |= controller_entry_flag_timeout_kill_no_e;
 
@@ -2255,7 +2255,7 @@ extern "C" {
 
           time = &entry->timeout_kill;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_start_s.string, cache->buffer_file, controller_start_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_start_s.string, cache->buffer_file, controller_start_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           if (cache->content_actions.array[i].used == 1) {
             entry->flag |= controller_entry_flag_timeout_start_no_e;
 
@@ -2268,7 +2268,7 @@ extern "C" {
 
           time = &entry->timeout_start;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_stop_s.string, cache->buffer_file, controller_stop_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_stop_s.string, cache->buffer_file, controller_stop_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           if (cache->content_actions.array[i].used == 1) {
             entry->flag |= controller_entry_flag_timeout_stop_no_e;
 
index 8fcd2167a3018a992d9b123e3380f22fd5e8a129..53b5accc17d587a67e3b2cebde47fe196bab16ac 100644 (file)
@@ -62,7 +62,7 @@ extern "C" {
  *   Errors (with error bit) from: f_fss_count_lines().
  *   Errors (with error bit) from: f_fss_apply_delimit().
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_rip_nulless().
+ *   Errors (with error bit) from: f_rip_dynamic_partial_nulless().
  *   Errors (with error bit) from: f_string_dynamics_increase_by().
  *   Errors (with error bit) from: fll_fss_extended_read().
  *
@@ -71,7 +71,7 @@ extern "C" {
  * @see f_string_dynamic_partial_append_nulless()
  * @see f_string_dynamics_increase_by()
  * @see f_fss_apply_delimit()
- * @see fl_string_dynamic_partial_rip_nulless()
+ * @see f_rip_dynamic_partial_nulless()
  * @see fll_fss_extended_read()
  */
 #ifndef _di_controller_entry_actions_read_
index ea8d85e7ee1781b2042617a9349c5000f8181b8f..600cb15597e2e662337aadf047b6da477a115848 100644 (file)
@@ -20,7 +20,7 @@ extern "C" {
 
     for (f_array_length_t i = 0; i < processs.used; ++i) {
 
-      if (processs.array[i] && processs.array[i]->action == action && fl_string_dynamic_compare(alias, processs.array[i]->rule.alias) == F_equal_to) {
+      if (processs.array[i] && processs.array[i]->action == action && f_compare_dynamic(alias, processs.array[i]->rule.alias) == F_equal_to) {
         if (at) *at = i;
 
         return F_true;
index 1c6c4088f988330006f40d0655fc5986fd392693..cc2e2e9c6354984dd4b300d0a40365f02ae78e39 100644 (file)
@@ -48,7 +48,7 @@ extern "C" {
 
     for (f_array_length_t i = 0; i < rules.used; ++i) {
 
-      if (fl_string_dynamic_compare(alias, rules.array[i].alias) == F_equal_to) {
+      if (f_compare_dynamic(alias, rules.array[i].alias) == F_equal_to) {
         if (at) *at = i;
 
         return F_true;
@@ -395,41 +395,41 @@ extern "C" {
         else if (type == controller_rule_action_type_pid_file_e) {
           item->pid_file.used = 0;
 
-          status = fl_string_dynamic_partial_rip(cache->buffer_item, cache->content_action.array[0], &item->pid_file);
+          status = f_rip_dynamic_partial(cache->buffer_item, cache->content_action.array[0], &item->pid_file);
 
           if (F_status_is_error(status)) {
-            controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "fl_string_dynamic_partial_rip", F_true);
+            controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "f_rip_dynamic_partial", F_true);
           }
         }
         else if (type == controller_rule_action_type_rerun_e) {
           uint8_t type_rerun = 0;
 
           if (cache->content_action.used) {
-            if (fl_string_dynamic_partial_compare_string(controller_freeze_s.string, cache->buffer_item, controller_freeze_s.used, cache->content_action.array[0]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(controller_freeze_s.string, cache->buffer_item, controller_freeze_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_freeze_e;
             }
-            if (fl_string_dynamic_partial_compare_string(controller_kill_s.string, cache->buffer_item, controller_kill_s.used, cache->content_action.array[0]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(controller_kill_s.string, cache->buffer_item, controller_kill_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_kill_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_pause_s.string, cache->buffer_item, controller_pause_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_pause_s.string, cache->buffer_item, controller_pause_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_pause_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_reload_s.string, cache->buffer_item, controller_reload_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_reload_s.string, cache->buffer_item, controller_reload_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_reload_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_restart_s.string, cache->buffer_item, controller_restart_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_restart_s.string, cache->buffer_item, controller_restart_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_restart_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_resume_s.string, cache->buffer_item, controller_resume_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_resume_s.string, cache->buffer_item, controller_resume_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_resume_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_start_s.string, cache->buffer_item, controller_start_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_start_s.string, cache->buffer_item, controller_start_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_start_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_stop_s.string, cache->buffer_item, controller_stop_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_stop_s.string, cache->buffer_item, controller_stop_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_stop_e;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_thaw_s.string, cache->buffer_item, controller_thaw_s.used, cache->content_action.array[0]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_thaw_s.string, cache->buffer_item, controller_thaw_s.used, cache->content_action.array[0]) == F_equal_to) {
               type_rerun = controller_rule_action_execute_type_thaw_e;
             }
           }
@@ -465,11 +465,11 @@ extern "C" {
           controller_rule_rerun_item_t *rerun_item = 0;
 
           if (cache->content_action.used > 1) {
-            if (fl_string_dynamic_partial_compare_string(controller_failure_s.string, cache->buffer_item, controller_failure_s.used, cache->content_action.array[1]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(controller_failure_s.string, cache->buffer_item, controller_failure_s.used, cache->content_action.array[1]) == F_equal_to) {
               rerun_item = &item->reruns[type_rerun].failure;
               item->reruns[type_rerun].is |= controller_rule_rerun_is_failure_d;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_success_s.string, cache->buffer_item, controller_success_s.used, cache->content_action.array[1]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_success_s.string, cache->buffer_item, controller_success_s.used, cache->content_action.array[1]) == F_equal_to) {
               rerun_item = &item->reruns[type_rerun].success;
               item->reruns[type_rerun].is |= controller_rule_rerun_is_success_d;
             }
@@ -497,13 +497,13 @@ extern "C" {
 
           for (i = 2; i < cache->content_action.used; ++i) {
 
-            if (fl_string_dynamic_partial_compare_string(controller_delay_s.string, cache->buffer_item, controller_delay_s.used, cache->content_action.array[i]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(controller_delay_s.string, cache->buffer_item, controller_delay_s.used, cache->content_action.array[i]) == F_equal_to) {
               status = controller_rule_action_read_rerun_number(global, controller_delay_s.string, cache, &i, &rerun_item->delay);
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_max_s.string, cache->buffer_item, controller_max_s.used, cache->content_action.array[i]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_max_s.string, cache->buffer_item, controller_max_s.used, cache->content_action.array[i]) == F_equal_to) {
               status = controller_rule_action_read_rerun_number(global, controller_max_s.string, cache, &i, &rerun_item->max);
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_reset_s.string, cache->buffer_item, controller_reset_s.used, cache->content_action.array[i]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_reset_s.string, cache->buffer_item, controller_reset_s.used, cache->content_action.array[i]) == F_equal_to) {
               item->reruns[type_rerun].is |= rerun_item == &item->reruns[type_rerun].failure ? controller_rule_rerun_is_failure_reset_d : controller_rule_rerun_is_success_reset_d;
             }
             else {
@@ -528,10 +528,10 @@ extern "C" {
         else if (type == controller_rule_action_type_with_e) {
           for (i = 0; i < cache->content_action.used; ++i) {
 
-            if (fl_string_dynamic_partial_compare_string(controller_full_path_s.string, cache->buffer_item, controller_full_path_s.used, cache->content_action.array[i]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(controller_full_path_s.string, cache->buffer_item, controller_full_path_s.used, cache->content_action.array[i]) == F_equal_to) {
               item->with |= controller_with_full_path_d;
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_session_new_s.string, cache->buffer_item, controller_session_new_s.used, cache->content_action.array[i]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_session_new_s.string, cache->buffer_item, controller_session_new_s.used, cache->content_action.array[i]) == F_equal_to) {
               item->with |= controller_with_session_new_d;
 
               // The "session_new" and "session_same" are mutually exclusive.
@@ -539,7 +539,7 @@ extern "C" {
                 item->with -= controller_with_session_same_d;
               }
             }
-            else if (fl_string_dynamic_partial_compare_string(controller_session_same_s.string, cache->buffer_item, controller_session_same_s.used, cache->content_action.array[i]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(controller_session_same_s.string, cache->buffer_item, controller_session_same_s.used, cache->content_action.array[i]) == F_equal_to) {
               item->with |= controller_with_session_same_d;
 
               // The "session_new" and "session_same" are mutually exclusive.
@@ -1035,11 +1035,11 @@ extern "C" {
 
           for (j = 0; j < process->rule.environment.used; ++j) {
 
-            if (fl_string_dynamic_compare(entry->define.array[i].name, process->rule.environment.array[j]) == F_equal_to) {
+            if (f_compare_dynamic(entry->define.array[i].name, process->rule.environment.array[j]) == F_equal_to) {
 
               for (k = 0; k < environment.used; ++k) {
 
-                if (fl_string_dynamic_compare(entry->define.array[i].name, environment.array[k].name) == F_equal_to) {
+                if (f_compare_dynamic(entry->define.array[i].name, environment.array[k].name) == F_equal_to) {
 
                   environment.array[k].value.used = 0;
 
@@ -1076,11 +1076,11 @@ extern "C" {
 
         for (j = 0; j < process->rule.environment.used; ++j) {
 
-          if (fl_string_dynamic_compare(process->rule.define.array[i].name, process->rule.environment.array[j]) == F_equal_to) {
+          if (f_compare_dynamic(process->rule.define.array[i].name, process->rule.environment.array[j]) == F_equal_to) {
 
             for (k = 0; k < environment.used; ++k) {
 
-              if (fl_string_dynamic_compare(process->rule.define.array[i].name, environment.array[k].name) == F_equal_to) {
+              if (f_compare_dynamic(process->rule.define.array[i].name, environment.array[k].name) == F_equal_to) {
 
                 environment.array[k].value.used = 0;
 
@@ -2021,13 +2021,13 @@ extern "C" {
 
     f_status_t status = F_none;
 
-    if (fl_string_dynamic_partial_compare_string(controller_define_s.string, source, controller_define_s.used, vocabulary) == F_equal_to) {
+    if (f_compare_dynamic_partial_string(controller_define_s.string, source, controller_define_s.used, vocabulary) == F_equal_to) {
       f_array_length_t i = 0;
 
       // First check to see if the environment variable is overwritten by a "define".
       for (; i < process->rule.define.used; ++i) {
 
-        if (fl_string_dynamic_partial_compare_string(process->rule.define.array[i].name.string, source, process->rule.define.array[i].name.used, content) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(process->rule.define.array[i].name.string, source, process->rule.define.array[i].name.used, content) == F_equal_to) {
           status = f_string_dynamic_append(process->rule.define.array[i].value, destination);
           if (F_status_is_error(status)) return status;
 
@@ -2040,7 +2040,7 @@ extern "C" {
 
         for (i = 0; i < entry->define.used; ++i) {
 
-            if (fl_string_dynamic_partial_compare_string(entry->define.array[i].name.string, source, entry->define.array[i].name.used, content) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(entry->define.array[i].name.string, source, entry->define.array[i].name.used, content) == F_equal_to) {
             status = f_string_dynamic_append(entry->define.array[i].value, destination);
             if (F_status_is_error(status)) return status;
 
@@ -2071,12 +2071,12 @@ extern "C" {
         if (F_status_is_error(status)) return status;
       }
     }
-    else if (fl_string_dynamic_partial_compare_string(controller_parameter_s.string, source, controller_parameter_s.used, vocabulary) == F_equal_to) {
+    else if (f_compare_dynamic_partial_string(controller_parameter_s.string, source, controller_parameter_s.used, vocabulary) == F_equal_to) {
       f_array_length_t i = 0;
 
       for (; i < process->rule.parameter.used; ++i) {
 
-        if (fl_string_dynamic_partial_compare_string(process->rule.parameter.array[i].name.string, source, process->rule.parameter.array[i].name.used, content) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(process->rule.parameter.array[i].name.string, source, process->rule.parameter.array[i].name.used, content) == F_equal_to) {
           status = f_string_dynamic_append(process->rule.parameter.array[i].value, destination);
           if (F_status_is_error(status)) return status;
 
@@ -2089,7 +2089,7 @@ extern "C" {
 
         for (i = 0; i < entry->parameter.used; ++i) {
 
-            if (fl_string_dynamic_partial_compare_string(entry->parameter.array[i].name.string, source, entry->parameter.array[i].name.used, content) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(entry->parameter.array[i].name.string, source, entry->parameter.array[i].name.used, content) == F_equal_to) {
             status = f_string_dynamic_append(entry->parameter.array[i].value, destination);
             if (F_status_is_error(status)) return status;
 
@@ -2098,7 +2098,7 @@ extern "C" {
         } // for
       }
     }
-    else if (fl_string_dynamic_partial_compare_string(controller_program_s.string, source, controller_program_s.used, vocabulary) == F_equal_to) {
+    else if (f_compare_dynamic_partial_string(controller_program_s.string, source, controller_program_s.used, vocabulary) == F_equal_to) {
       f_string_static_t * const argv = ((controller_main_t *) process->main_data)->parameters.arguments.array;
       f_console_parameters_t * const parameters = &((controller_main_t *) process->main_data)->parameters;
 
@@ -2215,7 +2215,7 @@ extern "C" {
 
       for (f_array_length_t i = 0; i < 17; ++i) {
 
-        if (fl_string_dynamic_partial_compare_string(options[i].string, source, options[i].used, content) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(options[i].string, source, options[i].used, content) == F_equal_to) {
           if (values[i]) {
             if (parameters->array[codes[i]].result & f_console_result_value_e) {
               const f_array_length_t index = parameters->array[codes[i]].values.array[parameters->array[codes[i]].values.used - 1];
@@ -2262,7 +2262,7 @@ extern "C" {
           memcpy(buffer_string, options[i].string, sizeof(f_char_t) * options[i].used);
           memcpy(buffer_string + options[i].used, controller_parameter_map_option_s.string, sizeof(f_char_t) * controller_parameter_map_option_s.used);
 
-          if (fl_string_dynamic_partial_compare_string(buffer.string, source, buffer.used, content) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(buffer.string, source, buffer.used, content) == F_equal_to) {
             if (values[i] && parameters->array[codes[i]].result & f_console_result_value_e || !values[i] && (parameters->array[codes[i]].result & f_console_result_found_e)) {
               status = f_string_dynamic_increase_by(symbols[i].used + expands[i].used + 1, destination);
               if (F_status_is_error(status)) return status;
@@ -2288,7 +2288,7 @@ extern "C" {
           memcpy(buffer_string, options[i].string, sizeof(f_char_t) * options[i].used);
           memcpy(buffer_string + options[i].used, controller_parameter_map_value_s.string, sizeof(f_char_t) * controller_parameter_map_value_s.used);
 
-          if (fl_string_dynamic_partial_compare_string(buffer.string, source, buffer.used, content) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(buffer.string, source, buffer.used, content) == F_equal_to) {
             if (parameters->array[codes[i]].result & f_console_result_value_e) {
               const f_array_length_t index = parameters->array[codes[i]].values.array[parameters->array[codes[i]].values.used - 1];
 
@@ -2420,54 +2420,54 @@ extern "C" {
       cache->action.line_action += ++item->line;
       cache->action.name_action.used = 0;
 
-      status = fl_string_dynamic_partial_rip_nulless(cache->buffer_item, cache->range_action, &cache->action.name_action);
+      status = f_rip_dynamic_partial_nulless(cache->buffer_item, cache->range_action, &cache->action.name_action);
 
       if (F_status_is_error(status)) {
-        controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true);
+        controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true);
 
         break;
       }
 
-      if (fl_string_dynamic_compare(controller_freeze_s, cache->action.name_action) == F_equal_to) {
+      if (f_compare_dynamic(controller_freeze_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_freeze_e;
       }
-      else if (fl_string_dynamic_compare(controller_group_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_group_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_group_e;
       }
-      else if (fl_string_dynamic_compare(controller_kill_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_kill_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_kill_e;
       }
-      else if (fl_string_dynamic_compare(controller_pause_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_pause_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_pause_e;
       }
-      else if (fl_string_dynamic_compare(controller_pid_file_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_pid_file_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_pid_file_e;
       }
-      else if (fl_string_dynamic_compare(controller_reload_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_reload_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_reload_e;
       }
-      else if (fl_string_dynamic_compare(controller_rerun_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_rerun_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_rerun_e;
       }
-      else if (fl_string_dynamic_compare(controller_restart_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_restart_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_restart_e;
       }
-      else if (fl_string_dynamic_compare(controller_resume_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_resume_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_resume_e;
       }
-      else if (fl_string_dynamic_compare(controller_start_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_start_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_start_e;
       }
-      else if (fl_string_dynamic_compare(controller_stop_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_stop_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_stop_e;
       }
-      else if (fl_string_dynamic_compare(controller_thaw_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_thaw_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_thaw_e;
       }
-      else if (fl_string_dynamic_compare(controller_user_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_user_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_user_e;
       }
-      else if (fl_string_dynamic_compare(controller_with_s, cache->action.name_action) == F_equal_to) {
+      else if (f_compare_dynamic(controller_with_s, cache->action.name_action) == F_equal_to) {
         type = controller_rule_action_type_with_e;
       }
       else {
@@ -3852,27 +3852,27 @@ extern "C" {
 
           rule->items.array[rule->items.used].line = ++cache->action.line_item;
 
-          status = fl_string_dynamic_partial_rip_nulless(cache->buffer_file, cache->object_items.array[i], &cache->action.name_item);
+          status = f_rip_dynamic_partial_nulless(cache->buffer_file, cache->object_items.array[i], &cache->action.name_item);
 
           if (F_status_is_error(status)) {
-            controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true);
+            controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true);
 
             break;
           }
 
-          if (fl_string_dynamic_compare(controller_settings_s, cache->action.name_item) == F_equal_to) {
+          if (f_compare_dynamic(controller_settings_s, cache->action.name_item) == F_equal_to) {
             rule->items.array[rule->items.used].type = 0;
           }
-          else if (fl_string_dynamic_compare(controller_command_s, cache->action.name_item) == F_equal_to) {
+          else if (f_compare_dynamic(controller_command_s, cache->action.name_item) == F_equal_to) {
             rule->items.array[rule->items.used].type = controller_rule_item_type_command_e;
           }
-          else if (fl_string_dynamic_compare(controller_script_s, cache->action.name_item) == F_equal_to) {
+          else if (f_compare_dynamic(controller_script_s, cache->action.name_item) == F_equal_to) {
             rule->items.array[rule->items.used].type = controller_rule_item_type_script_e;
           }
-          else if (fl_string_dynamic_compare(controller_service_s, cache->action.name_item) == F_equal_to) {
+          else if (f_compare_dynamic(controller_service_s, cache->action.name_item) == F_equal_to) {
             rule->items.array[rule->items.used].type = controller_rule_item_type_service_e;
           }
-          else if (fl_string_dynamic_compare(controller_utility_s, cache->action.name_item) == F_equal_to) {
+          else if (f_compare_dynamic(controller_utility_s, cache->action.name_item) == F_equal_to) {
             rule->items.array[rule->items.used].type = controller_rule_item_type_utility_e;
           }
           else {
@@ -4016,53 +4016,53 @@ extern "C" {
 
       empty_disallow = F_true;
 
-      if (fl_string_dynamic_compare(controller_affinity_s, cache->action.name_item) == F_equal_to) {
+      if (f_compare_dynamic(controller_affinity_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_affinity_e;
       }
-      else if (fl_string_dynamic_compare(controller_capability_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_capability_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_capability_e;
       }
-      else if (fl_string_dynamic_compare(controller_cgroup_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_cgroup_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_cgroup_e;
       }
-      else if (fl_string_dynamic_compare(controller_define_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_define_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_define_e;
       }
-      else if (fl_string_dynamic_compare(controller_engine_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_engine_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_engine_e;
       }
-      else if (fl_string_dynamic_compare(controller_environment_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_environment_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_environment_e;
         empty_disallow = F_false;
       }
-      else if (fl_string_dynamic_compare(controller_group_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_group_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_group_e;
       }
-      else if (fl_string_dynamic_compare(controller_limit_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_limit_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_limit_e;
       }
-      else if (fl_string_dynamic_compare(controller_name_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_name_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_name_e;
       }
-      else if (fl_string_dynamic_compare(controller_nice_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_nice_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_nice_e;
       }
-      else if (fl_string_dynamic_compare(controller_on_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_on_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_on_e;
       }
-      else if (fl_string_dynamic_compare(controller_parameter_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_parameter_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_parameter_e;
       }
-      else if (fl_string_dynamic_compare(controller_path_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_path_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_path_e;
       }
-      else if (fl_string_dynamic_compare(controller_scheduler_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_scheduler_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_scheduler_e;
       }
-      else if (fl_string_dynamic_compare(controller_timeout_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_timeout_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_timeout_e;
       }
-      else if (fl_string_dynamic_compare(controller_user_s, cache->action.name_item) == F_equal_to) {
+      else if (f_compare_dynamic(controller_user_s, cache->action.name_item) == F_equal_to) {
         type = controller_rule_setting_type_user_e;
       }
       else {
@@ -4334,10 +4334,10 @@ extern "C" {
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_existing_s.string, cache->buffer_item, controller_existing_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_existing_s.string, cache->buffer_item, controller_existing_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->cgroup.as_new = F_false;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_new_s.string, cache->buffer_item, controller_new_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_new_s.string, cache->buffer_item, controller_new_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->cgroup.as_new = F_true;
         }
         else {
@@ -4425,52 +4425,52 @@ extern "C" {
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_as_s.string, cache->buffer_item, controller_as_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_as_s.string, cache->buffer_item, controller_as_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_as_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_core_s.string, cache->buffer_item, controller_core_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_core_s.string, cache->buffer_item, controller_core_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_core_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_cpu_s.string, cache->buffer_item, controller_cpu_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_cpu_s.string, cache->buffer_item, controller_cpu_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_cpu_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_data_s.string, cache->buffer_item, controller_data_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_data_s.string, cache->buffer_item, controller_data_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_data_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_fsize_s.string, cache->buffer_item, controller_fsize_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_fsize_s.string, cache->buffer_item, controller_fsize_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_fsize_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_locks_s.string, cache->buffer_item, controller_locks_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_locks_s.string, cache->buffer_item, controller_locks_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_locks_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_memlock_s.string, cache->buffer_item, controller_memlock_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_memlock_s.string, cache->buffer_item, controller_memlock_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_memlock_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_msgqueue_s.string, cache->buffer_item, controller_msgqueue_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_msgqueue_s.string, cache->buffer_item, controller_msgqueue_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_msgqueue_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_nice_s.string, cache->buffer_item, controller_nice_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_nice_s.string, cache->buffer_item, controller_nice_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_nice_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_nofile_s.string, cache->buffer_item, controller_nofile_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_nofile_s.string, cache->buffer_item, controller_nofile_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_nofile_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_nproc_s.string, cache->buffer_item, controller_nproc_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_nproc_s.string, cache->buffer_item, controller_nproc_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_nproc_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_rss_s.string, cache->buffer_item, controller_rss_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_rss_s.string, cache->buffer_item, controller_rss_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_rss_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_rtprio_s.string, cache->buffer_item, controller_rtprio_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_rtprio_s.string, cache->buffer_item, controller_rtprio_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_rtprio_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_rttime_s.string, cache->buffer_item, controller_rttime_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_rttime_s.string, cache->buffer_item, controller_rttime_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_rttime_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_sigpending_s.string, cache->buffer_item, controller_sigpending_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_sigpending_s.string, cache->buffer_item, controller_sigpending_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_sigpending_e;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_stack_s.string, cache->buffer_item, controller_stack_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_stack_s.string, cache->buffer_item, controller_stack_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           type = controller_resource_limit_type_stack_e;
         }
         else {
@@ -4644,7 +4644,7 @@ extern "C" {
         }
 
         if (type == controller_rule_setting_type_name_e || type == controller_rule_setting_type_engine_e) {
-          status = fl_string_dynamic_partial_rip_nulless(cache->buffer_item, cache->content_actions.array[i].array[0], setting_value);
+          status = f_rip_dynamic_partial_nulless(cache->buffer_item, cache->content_actions.array[i].array[0], setting_value);
 
           if (type == controller_rule_setting_type_engine_e) {
             rule->engine_arguments.used = 0;
@@ -4783,27 +4783,27 @@ extern "C" {
           continue;
         }
 
-        if (fl_string_dynamic_partial_compare_string(controller_batch_s.string, cache->buffer_item, controller_batch_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_batch_s.string, cache->buffer_item, controller_batch_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->scheduler.policy = SCHED_BATCH;
           rule->scheduler.priority = 0;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_deadline_s.string, cache->buffer_item, controller_deadline_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_deadline_s.string, cache->buffer_item, controller_deadline_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->scheduler.policy = SCHED_DEADLINE;
           rule->scheduler.priority = 49;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_fifo_s.string, cache->buffer_item, controller_fifo_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_fifo_s.string, cache->buffer_item, controller_fifo_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->scheduler.policy = SCHED_FIFO;
           rule->scheduler.priority = 49;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_idle_s.string, cache->buffer_item, controller_idle_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_idle_s.string, cache->buffer_item, controller_idle_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->scheduler.policy = SCHED_IDLE;
           rule->scheduler.priority = 0;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_other_s.string, cache->buffer_item, controller_other_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_other_s.string, cache->buffer_item, controller_other_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->scheduler.policy = SCHED_OTHER;
           rule->scheduler.priority = 0;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_round_robin_s.string, cache->buffer_item, controller_round_robin_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_round_robin_s.string, cache->buffer_item, controller_round_robin_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           rule->scheduler.policy = SCHED_RR;
           rule->scheduler.priority = 49;
         }
@@ -4906,13 +4906,13 @@ extern "C" {
 
         uint8_t timeout_code = 0;
 
-        if (fl_string_dynamic_partial_compare_string(controller_kill_s.string, cache->buffer_item, controller_kill_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_kill_s.string, cache->buffer_item, controller_kill_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           timeout_code = controller_rule_timeout_code_kill_d;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_start_s.string, cache->buffer_item, controller_start_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_start_s.string, cache->buffer_item, controller_start_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           timeout_code = controller_rule_timeout_code_start_d;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_stop_s.string, cache->buffer_item, controller_stop_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_stop_s.string, cache->buffer_item, controller_stop_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
           timeout_code = controller_rule_timeout_code_stop_d;
         }
         else {
@@ -5002,10 +5002,10 @@ extern "C" {
 
             cache->action.generic.used = 0;
 
-            status = fl_string_dynamic_partial_rip_nulless(cache->buffer_item, cache->content_actions.array[i].array[1], &cache->action.generic);
+            status = f_rip_dynamic_partial_nulless(cache->buffer_item, cache->content_actions.array[i].array[1], &cache->action.generic);
 
             if (F_status_is_error(status)) {
-              controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "fl_string_dynamic_partial_rip_nulless", F_true);
+              controller_print_error(global.thread, global.main->error, F_status_set_fine(status), "f_rip_dynamic_partial_nulless", F_true);
 
               break;
             }
@@ -5469,31 +5469,31 @@ extern "C" {
         continue;
       }
 
-      if (fl_string_dynamic_partial_compare_string(controller_freeze_s.string, cache->buffer_item, controller_freeze_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(controller_freeze_s.string, cache->buffer_item, controller_freeze_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_freeze_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_kill_s.string, cache->buffer_item, controller_kill_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_kill_s.string, cache->buffer_item, controller_kill_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_kill_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_pause_s.string, cache->buffer_item, controller_pause_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_pause_s.string, cache->buffer_item, controller_pause_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_pause_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_reload_s.string, cache->buffer_item, controller_reload_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_reload_s.string, cache->buffer_item, controller_reload_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_reload_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_restart_s.string, cache->buffer_item, controller_restart_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_restart_s.string, cache->buffer_item, controller_restart_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_restart_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_resume_s.string, cache->buffer_item, controller_resume_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_resume_s.string, cache->buffer_item, controller_resume_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_resume_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_start_s.string, cache->buffer_item, controller_start_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_start_s.string, cache->buffer_item, controller_start_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_start_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_stop_s.string, cache->buffer_item, controller_stop_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_stop_s.string, cache->buffer_item, controller_stop_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_stop_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(controller_thaw_s.string, cache->buffer_item, controller_thaw_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(controller_thaw_s.string, cache->buffer_item, controller_thaw_s.used, cache->content_actions.array[i].array[0]) == F_equal_to) {
         action = controller_rule_action_type_thaw_e;
       }
       else {
@@ -5538,13 +5538,13 @@ extern "C" {
         controller_rule_print_error(global.thread, global.main->error, cache->action, F_status_set_fine(status), "controller_rule_ons_increase", F_true, F_false);
       }
       else {
-        if (fl_string_dynamic_partial_compare_string(controller_need_s.string, cache->buffer_item, controller_need_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(controller_need_s.string, cache->buffer_item, controller_need_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
           setting_values = &rule->ons.array[j].need;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_want_s.string, cache->buffer_item, controller_want_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_want_s.string, cache->buffer_item, controller_want_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
           setting_values = &rule->ons.array[j].want;
         }
-        else if (fl_string_dynamic_partial_compare_string(controller_wish_s.string, cache->buffer_item, controller_wish_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
+        else if (f_compare_dynamic_partial_string(controller_wish_s.string, cache->buffer_item, controller_wish_s.used, cache->content_actions.array[i].array[1]) == F_equal_to) {
           setting_values = &rule->ons.array[j].wish;
         }
         else {
index f47e311d307c5e5aa3f646c17b5470715dc8744d..2aca99be502c7f04ba56ec345c6f96edcb4503d7 100644 (file)
@@ -703,7 +703,7 @@ extern "C" {
  *    F_valid_not (with error bit) on success but there were one or more invalid settings encountered.
  *
  *   Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
- *   Errors (with error bit) from: fl_string_dynamic_partial_rip_nulless().
+ *   Errors (with error bit) from: f_rip_dynamic_partial_nulless().
  *   Errors (with error bit) from: f_string_dynamics_increase().
  *   Errors (with error bit) from: f_string_maps_increase().
  *   Errors (with error bit) from: fll_fss_extended_read().
@@ -713,7 +713,7 @@ extern "C" {
  * @see f_string_dynamic_partial_append_nulless()
  * @see f_string_dynamics_increase()
  * @see f_string_maps_increase()
- * @see fl_string_dynamic_partial_rip_nulless()
+ * @see f_rip_dynamic_partial_nulless()
  * @see fll_fss_extended_read()
  *
  * @see controller_path_canonical_relative()
index 9ec2ee2b4cedca3ea96a018bc3f6c5cdc58b257b..ca0cecf35b4a378dd18e351d36066fda9d9a6272 100644 (file)
@@ -9,6 +9,7 @@ f_utf
 f_account
 f_capability
 f_color
+f_compare
 f_console
 f_control_group
 f_conversion
@@ -19,9 +20,11 @@ f_file
 f_fss
 f_iki
 f_limit
+f_parse
 f_path
 f_pipe
 f_print
+f_rip
 f_signal
 f_socket
 f_status_string
@@ -35,7 +38,6 @@ fl_fss
 fl_iki
 fl_path
 fl_print
-fl_string
 
 fll_control_group
 fll_error
index c410e17cb43609b522552aed5c467608194351e1..021e2143088b3040f558df114be0a96f38ffa6bf 100644 (file)
@@ -19,8 +19,8 @@ build_language c
 
 build_libraries -lc -lcap
 build_libraries-individual -lfll_control_group -lfll_error -lfll_execute -lfll_fss -lfll_print -lfll_program -lfll_status_string
-build_libraries-individual -lfl_control_group -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_iki -lfl_path -lfl_print -lfl_string
-build_libraries-individual -lf_account -lf_capability -lf_color -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_iki -lf_limit -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_socket -lf_status_string -lf_string -lf_thread -lf_type_array -lf_utf
+build_libraries-individual -lfl_control_group -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_iki -lfl_path -lfl_print
+build_libraries-individual -lf_account -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_iki -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_socket -lf_status_string -lf_string -lf_thread -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index e4b9f02ad3694c0ad1d9243273c5fd67e511fc8f..4f7fcb246141c7f1f9e607c5325cb72bee0ca658 100644 (file)
@@ -567,7 +567,7 @@ extern "C" {
 
         for (j = 0; j < setting->modes.used; ++j) {
 
-          if (fl_string_dynamic_compare_trim(modes->array[i], setting->modes.array[j]) == F_equal_to) {
+          if (f_compare_dynamic_trim(modes->array[i], setting->modes.array[j]) == F_equal_to) {
             found = F_true;
 
             break;
@@ -1111,10 +1111,10 @@ extern "C" {
         if (!settings_single_source[i]->used) continue;
 
         if (settings_single_type[i] == 1) {
-          if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_common_setting_bool_yes_s) == F_equal_to) {
+          if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_common_setting_bool_yes_s) == F_equal_to) {
             *settings_single_bool[i] = F_true;
           }
-          else if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_common_setting_bool_no_s) == F_equal_to) {
+          else if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_common_setting_bool_no_s) == F_equal_to) {
             *settings_single_bool[i] = F_false;
           }
           else {
@@ -1124,13 +1124,13 @@ extern "C" {
           }
         }
         else if (settings_single_type[i] == 4) {
-          if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_language_bash_s) == F_equal_to) {
+          if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_language_bash_s) == F_equal_to) {
             *settings_single_language[i] = fake_build_language_bash_e;
           }
-          else if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_language_c_s) == F_equal_to) {
+          else if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_language_c_s) == F_equal_to) {
             *settings_single_language[i] = fake_build_language_c_e;
           }
-          else if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_language_cpp_s) == F_equal_to) {
+          else if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_language_cpp_s) == F_equal_to) {
             *settings_single_language[i] = fake_build_language_cpp_e;
           }
           else {
@@ -1140,16 +1140,16 @@ extern "C" {
           }
         }
         else if (settings_single_type[i] == 5) {
-          if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_major_s) == F_equal_to) {
+          if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_major_s) == F_equal_to) {
             *settings_single_version[i] = fake_build_version_major_e;
           }
-          else if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_minor_s) == F_equal_to) {
+          else if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_minor_s) == F_equal_to) {
             *settings_single_version[i] = fake_build_version_minor_e;
           }
-          else if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_micro_s) == F_equal_to) {
+          else if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_micro_s) == F_equal_to) {
             *settings_single_version[i] = fake_build_version_micro_e;
           }
-          else if (fl_string_dynamic_compare_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_nano_s) == F_equal_to) {
+          else if (f_compare_dynamic_trim(settings_single_source[i]->array[settings_single_source[i]->used - 1], fake_build_version_nano_s) == F_equal_to) {
             *settings_single_version[i] = fake_build_version_nano_e;
           }
           else {
index 8a65b326b357fb32f7c1b17e0c2b7bcfe0b4aef2..26e59950ec9c24105ffe1fc4e76e7319bf5f5e3a 100644 (file)
@@ -73,7 +73,7 @@ extern "C" {
     "fl_environment_load_name",
     "fl_environment_load_names",
     "fl_iki_read",
-    "fl_string_dynamic_partial_compare",
+    "f_compare_dynamic_partial",
     "fll_execute_arguments_add",
     "fll_execute_arguments_add_parameter_set",
     "fll_execute_program",
index 19e4ce4dc2aec9b03f22f5eb6b6b6e6246a64e31..b9ec7b0ed4f43384e69d6066f75257c2803ffdc4 100644 (file)
@@ -106,7 +106,7 @@ extern "C" {
     fake_f_fl_environment_load_name_e,
     fake_f_fl_environment_load_names_e,
     fake_f_fl_iki_read_e,
-    fake_f_fl_string_dynamic_partial_compare_e,
+    fake_f_f_compare_dynamic_partial_e,
     fake_f_fll_execute_arguments_add_e,
     fake_f_fll_execute_arguments_add_parameter_set_e,
     fake_f_fll_execute_program_e,
index a157756c57503e78e666cdcceaca5788e0a4f846..c783a1ea773a5687d428dc673e05d19c5694388e 100644 (file)
@@ -65,6 +65,7 @@
 #include <fll/level_0/utf.h>
 #include <fll/level_0/account.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/environment.h>
@@ -74,6 +75,7 @@
 #include <fll/level_0/path.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
@@ -85,7 +87,6 @@
 #include <fll/level_1/iki.h>
 #include <fll/level_1/path.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index b1a916b4561174c5426b6d0219a1ba9da07f58fc..9c950f7afc97907a604ba2122788194f649e96df 100644 (file)
@@ -23,7 +23,7 @@ extern "C" {
     const f_string_range_t range = macro_f_string_range_t_initialize2(data_make->path.stack.array[0].used);
 
     if (range.start <= range.stop) {
-      data_make->main->setting.state.status = fl_string_dynamic_partial_compare(data_make->path.stack.array[0], data_make->cache_path, range, range);
+      data_make->main->setting.state.status = f_compare_dynamic_partial(data_make->path.stack.array[0], data_make->cache_path, range, range);
       if (F_status_is_error(data_make->main->setting.state.status)) return;
 
       if (data_make->main->setting.state.status) {
index 03e414020a10531f3e918b13063f392de04c66ef..f6d3655ffabe54252fe53346b33ec4036bda74d8 100644 (file)
@@ -27,12 +27,12 @@ extern "C" {
  *     F_true if inside the project.
  *     F_false (with error bit) if path exists outside of the root project path.
  *
- *     Errors (with error bit) from: fl_string_dynamic_partial_compare()
+ *     Errors (with error bit) from: f_compare_dynamic_partial()
  *     Errors (with error bit) from: fl_path_canonical()
  * @param path
  *   file path to get the real path of.
  *
- * @see fl_string_dynamic_partial_compare()
+ * @see f_compare_dynamic_partial()
  * @see fl_path_canonical()
  */
 #ifndef _di_fake_make_assure_inside_project_
index 0738dd5ceaa0710011d2cc69f73d1d843597ad1b..6c24be117ae19020df2fe19128a65ed9d7cf433f 100644 (file)
@@ -115,7 +115,7 @@ extern "C" {
             data_make->main->program.signal_check = 0;
           }
 
-          if (fl_string_dynamic_partial_compare_string(fake_make_item_settings_s.string, data_make->buffer, fake_make_item_settings_s.used, list_objects.array[i]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(fake_make_item_settings_s.string, data_make->buffer, fake_make_item_settings_s.used, list_objects.array[i]) == F_equal_to) {
             if (!missing_settings) {
               fake_make_print_warning_setting_object_multiple(&data_make->main->program.warning, data_make->data->file_data_build_fakefile, fake_make_item_settings_s);
 
@@ -146,7 +146,7 @@ extern "C" {
             continue;
           }
 
-          if (fl_string_dynamic_partial_compare_string(fake_make_item_main_s.string, data_make->buffer, fake_make_item_main_s.used, list_objects.array[i]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(fake_make_item_main_s.string, data_make->buffer, fake_make_item_main_s.used, list_objects.array[i]) == F_equal_to) {
             if (!missing_main) {
               fake_make_print_warning_setting_object_multiple(&data_make->main->program.warning, data_make->data->file_data_build_fakefile, fake_make_item_main_s);
 
@@ -244,23 +244,23 @@ extern "C" {
       if (settings.objects.used) {
         for (f_array_length_t i = 0; i < settings.objects.used; ++i) {
 
-          if (fl_string_dynamic_partial_compare_string(fake_make_setting_load_build_s.string, data_make->buffer, fake_make_setting_load_build_s.used, settings.objects.array[i]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(fake_make_setting_load_build_s.string, data_make->buffer, fake_make_setting_load_build_s.used, settings.objects.array[i]) == F_equal_to) {
             fake_make_load_fakefile_setting_build(data_make, &settings.objects.array[i], &settings.contents.array[i]);
           }
-          else if (fl_string_dynamic_partial_compare_string(fake_make_setting_compiler_s.string, data_make->buffer, fake_make_setting_compiler_s.used, settings.objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(fake_make_setting_compiler_s.string, data_make->buffer, fake_make_setting_compiler_s.used, settings.objects.array[i]) == F_equal_to) {
             fake_make_load_fakefile_setting_compiler(data_make, &settings.objects.array[i], &settings.contents.array[i], &range_compiler);
           }
-          else if (fl_string_dynamic_partial_compare_string(fake_make_setting_environment_s.string, data_make->buffer, fake_make_setting_environment_s.used, settings.objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(fake_make_setting_environment_s.string, data_make->buffer, fake_make_setting_environment_s.used, settings.objects.array[i]) == F_equal_to) {
             fake_make_load_fakefile_setting_environment(data_make, &settings.contents.array[i]);
             if (F_status_is_error(data_make->main->setting.state.status)) break;
           }
-          else if (fl_string_dynamic_partial_compare_string(fake_make_setting_fail_s.string, data_make->buffer, fake_make_setting_fail_s.used, settings.objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(fake_make_setting_fail_s.string, data_make->buffer, fake_make_setting_fail_s.used, settings.objects.array[i]) == F_equal_to) {
             fake_make_load_fakefile_setting_fail(data_make, &settings.objects.array[i], &settings.contents.array[i]);
           }
-          else if (fl_string_dynamic_partial_compare_string(fake_make_setting_indexer_s.string, data_make->buffer, fake_make_setting_indexer_s.used, settings.objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(fake_make_setting_indexer_s.string, data_make->buffer, fake_make_setting_indexer_s.used, settings.objects.array[i]) == F_equal_to) {
             fake_make_load_fakefile_setting_indexer(data_make, &settings.objects.array[i], &settings.contents.array[i], &range_indexer);
           }
-          else if (fl_string_dynamic_partial_compare_string(fake_make_setting_parameter_s.string, data_make->buffer, fake_make_setting_parameter_s.used, settings.objects.array[i]) == F_equal_to) {
+          else if (f_compare_dynamic_partial_string(fake_make_setting_parameter_s.string, data_make->buffer, fake_make_setting_parameter_s.used, settings.objects.array[i]) == F_equal_to) {
             fake_make_load_fakefile_setting_parameter(data_make, &settings.objects.array[i], &settings.contents.array[i]);
             if (F_status_is_error(data_make->main->setting.state.status)) break;
           }
@@ -325,10 +325,10 @@ extern "C" {
     if (!data_make || !data_make->data || !data_make->main || !object || !content) return;
 
     if (content->used) {
-      if (fl_string_dynamic_partial_compare_string(fake_common_setting_bool_yes_s.string, data_make->buffer, fake_common_setting_bool_yes_s.used, content->array[0]) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(fake_common_setting_bool_yes_s.string, data_make->buffer, fake_common_setting_bool_yes_s.used, content->array[0]) == F_equal_to) {
         data_make->setting_make.load_build = F_true;
       }
-      else if (fl_string_dynamic_partial_compare_string(fake_common_setting_bool_no_s.string, data_make->buffer, fake_common_setting_bool_no_s.used, content->array[0]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(fake_common_setting_bool_no_s.string, data_make->buffer, fake_common_setting_bool_no_s.used, content->array[0]) == F_equal_to) {
         data_make->setting_make.load_build = F_false;
       }
       else {
@@ -474,7 +474,7 @@ extern "C" {
       // The environment settings are stored in the build settings rather than the make settings.
       if (fake_make_operate_validate_define_name(name_define) == F_true) {
         for (j = 0; j < data_make->setting_build.environment.used; ++j) {
-          if (fl_string_dynamic_compare(name_define, data_make->setting_build.environment.array[j]) == F_equal_to) break;
+          if (f_compare_dynamic(name_define, data_make->setting_build.environment.array[j]) == F_equal_to) break;
         } // for
 
         if (j == data_make->setting_build.environment.used) {
@@ -541,13 +541,13 @@ extern "C" {
     if (!data_make || !data_make->data || !data_make->data || !data_make->main || !object || !content) return;
 
     if (content->used) {
-      if (fl_string_dynamic_partial_compare_string(fake_make_operation_argument_exit_s.string, data_make->buffer, fake_make_operation_argument_exit_s.used, content->array[content->used - 1]) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(fake_make_operation_argument_exit_s.string, data_make->buffer, fake_make_operation_argument_exit_s.used, content->array[content->used - 1]) == F_equal_to) {
         data_make->setting_make.fail = fake_make_operation_fail_exit_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(fake_make_operation_argument_warn_s.string, data_make->buffer, fake_make_operation_argument_warn_s.used, content->array[content->used - 1]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(fake_make_operation_argument_warn_s.string, data_make->buffer, fake_make_operation_argument_warn_s.used, content->array[content->used - 1]) == F_equal_to) {
         data_make->setting_make.fail = fake_make_operation_fail_warn_e;
       }
-      else if (fl_string_dynamic_partial_compare_string(fake_make_operation_argument_ignore_s.string, data_make->buffer, fake_make_operation_argument_ignore_s.used, content->array[content->used - 1]) == F_equal_to) {
+      else if (f_compare_dynamic_partial_string(fake_make_operation_argument_ignore_s.string, data_make->buffer, fake_make_operation_argument_ignore_s.used, content->array[content->used - 1]) == F_equal_to) {
         data_make->setting_make.fail = fake_make_operation_fail_ignore_e;
       }
       else {
@@ -588,7 +588,7 @@ extern "C" {
     if (!data_make || !data_make->data || !data_make->data || !data_make->main || !object || !content) return;
 
     if (content->used) {
-      if (fl_string_dynamic_partial_compare_string(fake_make_setting_return_s.string, data_make->buffer, fake_make_setting_return_s.used, content->array[0]) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(fake_make_setting_return_s.string, data_make->buffer, fake_make_setting_return_s.used, content->array[0]) == F_equal_to) {
         if (content->used > 1) {
 
           // Each "return" define replaces the previous "return" define.
index b68446caa62802233d261a71d222c9878e3eda29..09f92c114956eec8a618cbdf16cfa7b888576fa7 100644 (file)
@@ -127,7 +127,7 @@ extern "C" {
         range.stop = data->main->program.parameters.arguments.array[index].used - 1;
 
         for (j = 0; j < data_make.fakefile.used; ++j) {
-          if (fl_string_dynamic_partial_compare(data->main->program.parameters.arguments.array[index], data_make.buffer, range, data_make.fakefile.array[j].name) == F_equal_to) break;
+          if (f_compare_dynamic_partial(data->main->program.parameters.arguments.array[index], data_make.buffer, range, data_make.fakefile.array[j].name) == F_equal_to) break;
         } // for
 
         if (j == data_make.fakefile.used) {
@@ -151,7 +151,7 @@ extern "C" {
 
           for (j = 0; j < data_make.fakefile.used; ++j) {
 
-            if (fl_string_dynamic_partial_compare(data->main->program.parameters.arguments.array[index], data_make.buffer, range, data_make.fakefile.array[j].name) == F_equal_to) {
+            if (f_compare_dynamic_partial(data->main->program.parameters.arguments.array[index], data_make.buffer, range, data_make.fakefile.array[j].name) == F_equal_to) {
               {
                 int result = fake_make_operate_section(&data_make, j, &section_stack);
 
@@ -420,21 +420,21 @@ extern "C" {
 
           is = 0;
 
-          data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(vocabulary_define.string, data_make->buffer, vocabulary_define.used, iki_data->vocabulary.array[j]);
+          data_make->main->setting.state.status = f_compare_dynamic_partial_string(vocabulary_define.string, data_make->buffer, vocabulary_define.used, iki_data->vocabulary.array[j]);
 
           if (data_make->main->setting.state.status == F_equal_to) {
             is = 2;
             iki_type |= 0x2;
           }
           else if (data_make->main->setting.state.status == F_equal_to_not) {
-            data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(vocabulary_parameter.string, data_make->buffer, vocabulary_parameter.used, iki_data->vocabulary.array[j]);
+            data_make->main->setting.state.status = f_compare_dynamic_partial_string(vocabulary_parameter.string, data_make->buffer, vocabulary_parameter.used, iki_data->vocabulary.array[j]);
 
             if (data_make->main->setting.state.status == F_equal_to) {
               is = 1;
               iki_type |= 0x1;
             }
             else if (data_make->main->setting.state.status == F_equal_to_not) {
-              data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(vocabulary_context.string, data_make->buffer, vocabulary_context.used, iki_data->vocabulary.array[j]);
+              data_make->main->setting.state.status = f_compare_dynamic_partial_string(vocabulary_context.string, data_make->buffer, vocabulary_context.used, iki_data->vocabulary.array[j]);
 
               if (data_make->main->setting.state.status == F_equal_to) {
                 is = 3;
@@ -444,7 +444,7 @@ extern "C" {
           }
 
           if (F_status_is_error(data_make->main->setting.state.status)) {
-            fake_print_error(&data_make->main->program.error, macro_fake_f(fl_string_dynamic_partial_compare));
+            fake_print_error(&data_make->main->program.error, macro_fake_f(f_compare_dynamic_partial));
 
             break;
           }
@@ -453,7 +453,7 @@ extern "C" {
             unmatched = F_true;
 
             // Check against reserved parameter names and if matches use them instead.
-            if (fl_string_dynamic_partial_compare_string(fake_make_parameter_variable_return_s.string, data_make->buffer, fake_make_parameter_variable_return_s.used, iki_data->content.array[j]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(fake_make_parameter_variable_return_s.string, data_make->buffer, fake_make_parameter_variable_return_s.used, iki_data->content.array[j]) == F_equal_to) {
 
               if (data_make->setting_make.parameter.array[0].value.array[0].used) {
                 data_make->main->setting.state.status = f_string_dynamic_append_nulless(data_make->setting_make.parameter.array[0].value.array[0], &data_make->cache_arguments.array[data_make->cache_arguments.used]);
@@ -476,7 +476,7 @@ extern "C" {
 
               unmatched = F_false;
             }
-            else if (fl_string_dynamic_partial_compare_string(fake_make_parameter_variable_top_s.string, data_make->buffer, fake_make_parameter_variable_top_s.used, iki_data->content.array[j]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(fake_make_parameter_variable_top_s.string, data_make->buffer, fake_make_parameter_variable_top_s.used, iki_data->content.array[j]) == F_equal_to) {
 
               if (data_make->path.stack.used) {
                 data_make->main->setting.state.status = f_string_dynamic_increase_by(data_make->path.stack.array[0].used + f_path_separator_s.used + 1, &data_make->cache_arguments.array[data_make->cache_arguments.used]);
@@ -507,7 +507,7 @@ extern "C" {
 
               unmatched = F_false;
             }
-            else if (fl_string_dynamic_partial_compare_string(fake_make_parameter_variable_current_s.string, data_make->buffer, fake_make_parameter_variable_current_s.used, iki_data->content.array[j]) == F_equal_to) {
+            else if (f_compare_dynamic_partial_string(fake_make_parameter_variable_current_s.string, data_make->buffer, fake_make_parameter_variable_current_s.used, iki_data->content.array[j]) == F_equal_to) {
 
               if (data_make->path.stack.used) {
                 data_make->main->setting.state.status = f_string_dynamic_increase_by(data_make->path.stack.array[data_make->path.stack.used - 1].used + f_path_separator_s.used + 1, &data_make->cache_arguments.array[data_make->cache_arguments.used]);
@@ -541,7 +541,7 @@ extern "C" {
             else {
               for (k = 0; k < 39; ++k) {
 
-                if (fl_string_dynamic_partial_compare_string(reserved_name[k].string, data_make->buffer, reserved_name[k].used, iki_data->content.array[j]) != F_equal_to) {
+                if (f_compare_dynamic_partial_string(reserved_name[k].string, data_make->buffer, reserved_name[k].used, iki_data->content.array[j]) != F_equal_to) {
                   continue;
                 }
 
@@ -639,7 +639,7 @@ extern "C" {
               for (k = 0; k < parameter->used; ++k) {
 
                 // Check against IKI variable list.
-                if (fl_string_dynamic_partial_compare_dynamic(parameter->array[k].name, data_make->buffer, iki_data->content.array[j]) != F_equal_to) {
+                if (f_compare_dynamic_partial_dynamic(parameter->array[k].name, data_make->buffer, iki_data->content.array[j]) != F_equal_to) {
                   continue;
                 }
 
@@ -853,7 +853,7 @@ extern "C" {
 
       for (; i < 3; ++i) {
 
-        data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(uint8_name[i].string, data_make->buffer, uint8_name[i].used, range_name);
+        data_make->main->setting.state.status = f_compare_dynamic_partial_string(uint8_name[i].string, data_make->buffer, uint8_name[i].used, range_name);
 
         if (data_make->main->setting.state.status == F_equal_to) {
           unmatched = F_false;
@@ -888,7 +888,7 @@ extern "C" {
 
       for (i = 0; i < 7; ++i) {
 
-        data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(bool_name[i].string, data_make->buffer, bool_name[i].used, range_name);
+        data_make->main->setting.state.status = f_compare_dynamic_partial_string(bool_name[i].string, data_make->buffer, bool_name[i].used, range_name);
 
         if (data_make->main->setting.state.status == F_equal_to) {
           unmatched = F_false;
@@ -948,7 +948,7 @@ extern "C" {
 
       for (i = 0; i < 17; ++i) {
 
-        data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(dynamic_name[i].string, data_make->buffer, dynamic_name[i].used, range_name);
+        data_make->main->setting.state.status = f_compare_dynamic_partial_string(dynamic_name[i].string, data_make->buffer, dynamic_name[i].used, range_name);
 
         if (data_make->main->setting.state.status == F_equal_to) {
           unmatched = F_false;
@@ -1082,7 +1082,7 @@ extern "C" {
 
       for (i = 0; i < 36; ++i) {
 
-        data_make->main->setting.state.status = fl_string_dynamic_partial_compare_string(dynamics_name[i].string, data_make->buffer, dynamics_name[i].used, range_name);
+        data_make->main->setting.state.status = f_compare_dynamic_partial_string(dynamics_name[i].string, data_make->buffer, dynamics_name[i].used, range_name);
 
         if (data_make->main->setting.state.status == F_equal_to) {
           unmatched = F_false;
@@ -1163,7 +1163,7 @@ extern "C" {
 
     for (f_array_length_t i = 0; i < 9; ++i) {
 
-      if (fl_string_dynamic_partial_compare_string(context_name[i].string, data_make->buffer, context_name[i].used, range_name) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(context_name[i].string, data_make->buffer, context_name[i].used, range_name) == F_equal_to) {
         context = context_value[i].before;
 
         break;
@@ -1372,7 +1372,7 @@ extern "C" {
 
       for (j = 0; j < fake_max_operation_d; ++j) {
 
-        if (fl_string_dynamic_partial_compare_string(operations_name[j].string, data_make->buffer, operations_name[j].used, section->objects.array[i]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(operations_name[j].string, data_make->buffer, operations_name[j].used, section->objects.array[i]) == F_equal_to) {
           state_process.operation = operations_type[j];
 
           break;
index 47605462b9c41aaa27d4b8bbf0aae626c2fe25d5..372a9612000c6b66d295ce9e390481a363a4c8e7 100644 (file)
@@ -76,7 +76,7 @@ extern "C" {
  *     Errors (with error bit) from: f_string_dynamics_increase()
  *     Errors (with error bit) from: f_string_dynamics_increase_by()
  *     Errors (with error bit) from: fl_iki_read()
- *     Errors (with error bit) from: fl_string_dynamic_partial_compare_string()
+ *     Errors (with error bit) from: f_compare_dynamic_partial_string()
  *
  *     Errors (with error bit) from: fake_make_operate_expand_build()
  *     Errors (with error bit) from: fake_make_operate_expand_context()
@@ -96,7 +96,7 @@ extern "C" {
  * @see f_string_dynamics_increase()
  * @see f_string_dynamics_increase_by()
  * @see fl_iki_read()
- * @see fl_string_dynamic_partial_compare_string()
+ * @see f_compare_dynamic_partial_string()
  *
  * @see fake_make_operate_expand_build()
  * @see fake_make_operate_expand_context()
index b29071826f6d2034d1f4a0df38a72a8e3e604822..f2183f86d82a73b8ac44e22e94fb18edcf9fb304 100644 (file)
@@ -11,10 +11,10 @@ extern "C" {
 
     data_make->main->setting.state.status = F_none;
 
-    if (!data_make->cache_arguments.used || fl_string_dynamic_compare(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+    if (!data_make->cache_arguments.used || f_compare_dynamic(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to) {
       data_make->main->setting.state.status = F_signal_abort;
     }
-    else if (fl_string_dynamic_compare(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+    else if (f_compare_dynamic(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to) {
       data_make->main->setting.state.status = F_status_set_error(F_signal_abort);
     }
     else {
@@ -86,7 +86,7 @@ extern "C" {
 
       for (f_array_length_t i = 2; i < data_make->cache_arguments.used; ++i) {
 
-        if (fl_string_dynamic_compare(data_make->cache_arguments.array[1], data_make->cache_arguments.array[i]) == F_equal_to_not) {
+        if (f_compare_dynamic(data_make->cache_arguments.array[1], data_make->cache_arguments.array[i]) == F_equal_to_not) {
           state_process->condition_result = fake_condition_result_false_e;
 
           break;
@@ -103,7 +103,7 @@ extern "C" {
 
         for (j = i + 1; j < data_make->cache_arguments.used; ++j) {
 
-          if (fl_string_dynamic_compare(data_make->cache_arguments.array[i], data_make->cache_arguments.array[j]) == F_equal_to) {
+          if (f_compare_dynamic(data_make->cache_arguments.array[i], data_make->cache_arguments.array[j]) == F_equal_to) {
             state_process->condition_result = fake_condition_result_false_e;
             i = data_make->cache_arguments.used;
 
@@ -216,7 +216,7 @@ extern "C" {
     bool existing = F_true;
     f_array_length_t i = 0;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       recurse.flag |= f_file_stat_flag_reference_e;
     }
@@ -450,10 +450,10 @@ extern "C" {
 
     data_make->main->setting.state.status = F_none;
 
-    if (!data_make->cache_arguments.used || fl_string_dynamic_compare(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+    if (!data_make->cache_arguments.used || f_compare_dynamic(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to) {
       data_make->main->setting.state.status = F_signal_quit;
     }
-    else if (fl_string_dynamic_compare(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+    else if (f_compare_dynamic(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to) {
       data_make->main->setting.state.status = F_status_set_error(F_signal_quit);
 
       // Forcing exit forces fail mode.
@@ -481,7 +481,7 @@ extern "C" {
 
     if (!data_make || !data_make->main) return;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_exit_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_exit_s, data_make->cache_arguments.array[0]) == F_equal_to) {
       data_make->setting_make.fail = fake_make_operation_fail_exit_e;
       data_make->error.prefix = fl_print_error_s;
       data_make->error.suffix = f_string_empty_s;
@@ -491,7 +491,7 @@ extern "C" {
       data_make->main->program.error.to.id = F_type_descriptor_error_d;
       data_make->error.set = &data_make->main->program.context.set;
     }
-    else if (fl_string_dynamic_compare(fake_make_operation_argument_warn_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+    else if (f_compare_dynamic(fake_make_operation_argument_warn_s, data_make->cache_arguments.array[0]) == F_equal_to) {
       data_make->setting_make.fail = fake_make_operation_fail_warn_e;
       data_make->error.prefix = fl_print_warning_s;
       data_make->error.suffix = f_string_empty_s;
@@ -522,7 +522,7 @@ extern "C" {
 
     data_make->main->setting.state.status = F_none;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       dereference = F_false;
     }
@@ -621,7 +621,7 @@ extern "C" {
 
     state_process->condition_result = fake_condition_result_true_e;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       dereference = F_false;
     }
@@ -676,7 +676,7 @@ extern "C" {
 
     data_make->main->setting.state.status = F_none;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       dereference = F_false;
     }
@@ -696,31 +696,31 @@ extern "C" {
 
     for (; i < data_make->cache_arguments.used; ++i) {
 
-      if (fl_string_dynamic_compare(fake_make_operation_argument_if_is_for_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      if (f_compare_dynamic(fake_make_operation_argument_if_is_for_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         ++i;
 
         break;
       }
 
-      if (fl_string_dynamic_compare(f_file_type_name_block_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      if (f_compare_dynamic(f_file_type_name_block_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x1;
       }
-      else if (fl_string_dynamic_compare(f_file_type_name_character_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      else if (f_compare_dynamic(f_file_type_name_character_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x2;
       }
-      else if (fl_string_dynamic_compare(f_file_type_name_directory_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      else if (f_compare_dynamic(f_file_type_name_directory_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x4;
       }
-      else if (fl_string_dynamic_compare(f_file_type_name_fifo_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      else if (f_compare_dynamic(f_file_type_name_fifo_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x8;
       }
-      else if (fl_string_dynamic_compare(f_file_type_name_link_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      else if (f_compare_dynamic(f_file_type_name_link_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x10;
       }
-      else if (fl_string_dynamic_compare(f_file_type_name_regular_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      else if (f_compare_dynamic(f_file_type_name_regular_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x20;
       }
-      else if (fl_string_dynamic_compare(f_file_type_name_socket_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+      else if (f_compare_dynamic(f_file_type_name_socket_s, data_make->cache_arguments.array[i]) == F_equal_to) {
         type |= 0x40;
       }
     } // for
@@ -943,7 +943,7 @@ extern "C" {
 
     data_make->main->setting.state.status = F_none;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       dereference = F_false;
     }
@@ -1005,7 +1005,7 @@ extern "C" {
     mode_t mode_match = 0;
     bool is = F_false;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_is_s, data_make->cache_arguments.array[if_not ? 2 : 1]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_is_s, data_make->cache_arguments.array[if_not ? 2 : 1]) == F_equal_to) {
       is = F_true;
     }
 
@@ -1104,7 +1104,7 @@ extern "C" {
 
     data_make->main->setting.state.status = F_none;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       dereference = F_false;
     }
@@ -1247,7 +1247,7 @@ extern "C" {
 
       for (j = 0; j < 33; ++j) {
 
-        if (fl_string_dynamic_compare(reserved_name[j], data_make->cache_arguments.array[i]) == F_equal_to) {
+        if (f_compare_dynamic(reserved_name[j], data_make->cache_arguments.array[i]) == F_equal_to) {
           result = reserved_parameter[j] ? 2 : 1;
 
           break;
@@ -1257,7 +1257,7 @@ extern "C" {
       if (!result) {
         for (j = 0; j < data_make->setting_make.parameter.used; ++j) {
 
-          if (fl_string_dynamic_compare(data_make->cache_arguments.array[i], data_make->setting_make.parameter.array[j].name) == F_equal_to) {
+          if (f_compare_dynamic(data_make->cache_arguments.array[i], data_make->setting_make.parameter.array[j].name) == F_equal_to) {
             result = 2;
 
             break;
@@ -1319,18 +1319,18 @@ extern "C" {
     uint8_t flag = 0;
 
     if (data_make->cache_arguments.used > 2) {
-      if (fl_string_dynamic_compare(fake_make_operation_argument_force_s, data_make->cache_arguments.array[1]) != F_equal_to) {
+      if (f_compare_dynamic(fake_make_operation_argument_force_s, data_make->cache_arguments.array[1]) != F_equal_to) {
         flag |= 0x1;
       }
-      else if (fl_string_dynamic_compare(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[1]) == F_equal_to) {
+      else if (f_compare_dynamic(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[1]) == F_equal_to) {
         flag |= 0x2;
       }
 
       if (data_make->cache_arguments.used > 3) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_force_s, data_make->cache_arguments.array[2]) != F_equal_to) {
+        if (f_compare_dynamic(fake_make_operation_argument_force_s, data_make->cache_arguments.array[2]) != F_equal_to) {
           flag |= 0x1;
         }
-        else if (fl_string_dynamic_compare(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[2]) == F_equal_to) {
+        else if (f_compare_dynamic(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[2]) == F_equal_to) {
           flag |= 0x2;
         }
       }
@@ -1556,7 +1556,7 @@ extern "C" {
 
     for (; id_section < data_make->fakefile.used; ++id_section) {
 
-      if (fl_string_dynamic_partial_compare_string(data_make->cache_arguments.array[0].string, data_make->buffer, data_make->cache_arguments.array[0].used, data_make->fakefile.array[id_section].name) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(data_make->cache_arguments.array[0].string, data_make->buffer, data_make->cache_arguments.array[0].used, data_make->fakefile.array[id_section].name) == F_equal_to) {
         break;
       }
     } // for
@@ -1586,7 +1586,7 @@ extern "C" {
     bool dereference = F_true;
     f_array_length_t i = 0;
 
-    if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+    if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
       ++i;
       dereference = F_false;
     }
@@ -1643,7 +1643,7 @@ extern "C" {
 
     for (; i < data_make->setting_make.parameter.used; ++i) {
 
-      if (fl_string_dynamic_compare(data_make->cache_arguments.array[0], data_make->setting_make.parameter.array[i].name) == F_equal_to) {
+      if (f_compare_dynamic(data_make->cache_arguments.array[0], data_make->setting_make.parameter.array[i].name) == F_equal_to) {
         found = F_true;
 
         break;
@@ -1967,7 +1967,7 @@ extern "C" {
 
     for (f_array_length_t i = 1; i < data_make->cache_arguments.used; ++i) {
 
-      if (fl_string_dynamic_compare(fake_make_operation_argument_file_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+      if (f_compare_dynamic(fake_make_operation_argument_file_s, data_make->cache_arguments.array[0]) == F_equal_to) {
         data_make->main->setting.state.status = f_file_touch(data_make->cache_arguments.array[i], mode.regular, F_false);
 
         if (F_status_is_error(data_make->main->setting.state.status)) {
@@ -1983,7 +1983,7 @@ extern "C" {
           return;
         }
       }
-      else if (fl_string_dynamic_compare(fake_make_operation_argument_directory_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+      else if (f_compare_dynamic(fake_make_operation_argument_directory_s, data_make->cache_arguments.array[0]) == F_equal_to) {
         data_make->main->setting.state.status = f_directory_touch(data_make->cache_arguments.array[i], mode.directory);
 
         if (F_status_is_error(data_make->main->setting.state.status)) {
index 235ef284e1f54413cb5bbf19ac5bcbb0318ef42d..adccd5f064b51176ae5da2338952ef385b1599e7 100644 (file)
@@ -18,8 +18,8 @@ extern "C" {
     }
 
     if (data_make->cache_arguments.used) {
-      if (fl_string_dynamic_compare(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+      if (f_compare_dynamic(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+        if (f_compare_dynamic(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
           fake_make_print_error_unsupported_type(&data_make->main->program.error, fake_make_operation_break_s, data_make->cache_arguments.array[0]);
 
           data_make->main->setting.state.status = F_status_set_error(F_failure);
@@ -303,7 +303,7 @@ extern "C" {
         if_and_or = fake_make_operation_if_s;
       }
 
-      if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[k]) == F_equal_to) {
+      if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[k]) == F_equal_to) {
         ++k;
         dereference = F_false;
       }
@@ -349,7 +349,7 @@ extern "C" {
         // Skip the "if not XXX" types as they are determined later on.
         if (i > 12 && i < 21) continue;
 
-        if (fl_string_dynamic_compare(if_type_strings[i], data_make->cache_arguments.array[k]) == F_equal_to) {
+        if (f_compare_dynamic(if_type_strings[i], data_make->cache_arguments.array[k]) == F_equal_to) {
           state_process->condition = if_type_codes[i];
 
           break;
@@ -380,7 +380,7 @@ extern "C" {
 
         for (; j < 7; ++j) {
 
-          if (fl_string_dynamic_compare(if_not_type_strings[j], data_make->cache_arguments.array[k]) == F_equal_to) {
+          if (f_compare_dynamic(if_not_type_strings[j], data_make->cache_arguments.array[k]) == F_equal_to) {
             state_process->condition = if_not_type_codes[j];
 
             break;
@@ -437,8 +437,8 @@ extern "C" {
         if (state_process->condition == fake_make_operation_if_type_if_group_e || state_process->condition == fake_make_operation_if_type_if_is_e || state_process->condition == fake_make_operation_if_type_if_mode_e || state_process->condition > fake_make_operation_if_type_if_not_exist_e && state_process->condition < fake_make_operation_if_type_if_success_e) {
 
           if (state_process->condition == fake_make_operation_if_type_if_mode_e || state_process->condition == fake_make_operation_if_type_if_not_mode_e) {
-            if (fl_string_dynamic_compare(fake_make_operation_argument_is_s, data_make->cache_arguments.array[k]) == F_equal_to_not) {
-              if (fl_string_dynamic_compare(fake_make_operation_argument_has_s, data_make->cache_arguments.array[k]) == F_equal_to_not) {
+            if (f_compare_dynamic(fake_make_operation_argument_is_s, data_make->cache_arguments.array[k]) == F_equal_to_not) {
+              if (f_compare_dynamic(fake_make_operation_argument_has_s, data_make->cache_arguments.array[k]) == F_equal_to_not) {
 
                 if (j == 6) {
                   fake_make_print_error_unsupported_type(&data_make->main->program.error, fake_make_operation_mode_s, data_make->cache_arguments.array[k]);
@@ -494,31 +494,31 @@ extern "C" {
 
             for (i = k; i < data_make->cache_arguments.used; ++i) {
 
-              if (fl_string_dynamic_compare(fake_make_operation_argument_if_is_for_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              if (f_compare_dynamic(fake_make_operation_argument_if_is_for_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 ++i;
 
                 break;
               }
 
-              if (fl_string_dynamic_compare(f_file_type_name_block_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              if (f_compare_dynamic(f_file_type_name_block_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x1;
               }
-              else if (fl_string_dynamic_compare(f_file_type_name_character_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              else if (f_compare_dynamic(f_file_type_name_character_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x2;
               }
-              else if (fl_string_dynamic_compare(f_file_type_name_directory_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              else if (f_compare_dynamic(f_file_type_name_directory_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x4;
               }
-              else if (fl_string_dynamic_compare(f_file_type_name_fifo_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              else if (f_compare_dynamic(f_file_type_name_fifo_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x8;
               }
-              else if (fl_string_dynamic_compare(f_file_type_name_link_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              else if (f_compare_dynamic(f_file_type_name_link_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x10;
               }
-              else if (fl_string_dynamic_compare(f_file_type_name_regular_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              else if (f_compare_dynamic(f_file_type_name_regular_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x20;
               }
-              else if (fl_string_dynamic_compare(f_file_type_name_socket_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+              else if (f_compare_dynamic(f_file_type_name_socket_s, data_make->cache_arguments.array[i]) == F_equal_to) {
                 type_file |= 0x40;
               }
               else {
@@ -835,8 +835,8 @@ extern "C" {
     }
 
     if (data_make->cache_arguments.used) {
-      if (fl_string_dynamic_compare(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+      if (f_compare_dynamic(fake_make_operation_argument_success_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+        if (f_compare_dynamic(fake_make_operation_argument_failure_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
           fake_make_print_error_unsupported_type(&data_make->main->program.error, fake_make_operation_exit_s, data_make->cache_arguments.array[0]);
 
           data_make->main->setting.state.status = F_status_set_error(F_failure);
@@ -856,9 +856,9 @@ extern "C" {
     if (!data_make || !data_make->main) return;
 
     if (data_make->cache_arguments.used) {
-      if (fl_string_dynamic_compare(fake_make_operation_argument_exit_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_warn_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
-          if (fl_string_dynamic_compare(fake_make_operation_argument_ignore_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+      if (f_compare_dynamic(fake_make_operation_argument_exit_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+        if (f_compare_dynamic(fake_make_operation_argument_warn_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+          if (f_compare_dynamic(fake_make_operation_argument_ignore_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
             fake_make_print_error_unsupported_type(&data_make->main->program.error, fake_make_operation_fail_s, data_make->cache_arguments.array[0]);
 
             data_make->main->setting.state.status = F_status_set_error(F_failure);
@@ -919,10 +919,10 @@ extern "C" {
       uint8_t flag = 0;
 
       if (data_make->cache_arguments.used > 2) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_force_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+        if (f_compare_dynamic(fake_make_operation_argument_force_s, data_make->cache_arguments.array[0]) == F_equal_to) {
           flag |= 0x1;
         }
-        else if (fl_string_dynamic_compare(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[0]) == F_equal_to) {
+        else if (f_compare_dynamic(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[0]) == F_equal_to) {
           flag |= 0x2;
         }
         else {
@@ -932,10 +932,10 @@ extern "C" {
         }
 
         if (data_make->cache_arguments.used > 3) {
-          if (fl_string_dynamic_compare(fake_make_operation_argument_force_s, data_make->cache_arguments.array[1]) == F_equal_to) {
+          if (f_compare_dynamic(fake_make_operation_argument_force_s, data_make->cache_arguments.array[1]) == F_equal_to) {
             flag |= 0x1;
           }
-          else if (fl_string_dynamic_compare(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[1]) == F_equal_to) {
+          else if (f_compare_dynamic(fake_make_operation_argument_strict_s, data_make->cache_arguments.array[1]) == F_equal_to) {
             flag |= 0x2;
           }
           else {
@@ -1165,7 +1165,7 @@ extern "C" {
 
       for (; id_section < data_make->fakefile.used; ++id_section) {
 
-        if (fl_string_dynamic_partial_compare_string(data_make->cache_arguments.array[0].string, data_make->buffer, data_make->cache_arguments.array[0].used, data_make->fakefile.array[id_section].name) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(data_make->cache_arguments.array[0].string, data_make->buffer, data_make->cache_arguments.array[0].used, data_make->fakefile.array[id_section].name) == F_equal_to) {
           break;
         }
       } // for
@@ -1245,7 +1245,7 @@ extern "C" {
 
       for (f_array_length_t i = 0; i < 33; ++i) {
 
-        if (fl_string_dynamic_compare(reserved_name[i], data_make->cache_arguments.array[0]) == F_equal_to) {
+        if (f_compare_dynamic(reserved_name[i], data_make->cache_arguments.array[0]) == F_equal_to) {
           fake_make_print_error_reserved_parameter_name(&data_make->main->program.error, reserved_name[i]);
 
           status = F_status_set_error(F_failure);
@@ -1271,7 +1271,7 @@ extern "C" {
       f_array_length_t i = 1;
 
       if (state_process->operation == fake_make_operation_type_group_e || state_process->operation == fake_make_operation_type_groups_e || state_process->operation == fake_make_operation_type_owner_e || state_process->operation == fake_make_operation_type_owners_e) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
+        if (f_compare_dynamic(fake_make_operation_argument_no_dereference_s, data_make->cache_arguments.array[i]) == F_equal_to) {
           i = 2;
         }
       }
@@ -1413,8 +1413,8 @@ extern "C" {
     if (!data_make || !data_make->main) return;
 
     if (data_make->cache_arguments.used > 1) {
-      if (fl_string_dynamic_compare(fake_make_operation_argument_file_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
-        if (fl_string_dynamic_compare(fake_make_operation_argument_directory_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+      if (f_compare_dynamic(fake_make_operation_argument_file_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
+        if (f_compare_dynamic(fake_make_operation_argument_directory_s, data_make->cache_arguments.array[0]) == F_equal_to_not) {
           fake_make_print_error_unsupported_type(&data_make->main->program.error, f_file_type_name_file_s, data_make->cache_arguments.array[0]);
 
           data_make->main->setting.state.status = F_status_set_error(F_failure);
index 755823c0aa4f29a1197311b9f2b8cfdc075a6278..447774bf6aa49add8523b24397ef8bc92495470d 100644 (file)
@@ -9,6 +9,7 @@ f_utf
 f_account
 f_capability
 f_color
+f_compare
 f_console
 f_control_group
 f_conversion
@@ -19,9 +20,11 @@ f_file
 f_fss
 f_iki
 f_limit
+f_parse
 f_path
 f_pipe
 f_print
+f_rip
 f_signal
 f_thread
 
@@ -34,7 +37,6 @@ fl_fss
 fl_iki
 fl_path
 fl_print
-fl_string
 
 fll_error
 fll_execute
index 43b1e4f5e568d06f01730a78869acf3d24219056..ffa6a65a2eeb55633f09995c0db32af6be00218e 100644 (file)
@@ -22,8 +22,8 @@ build_language c
 
 build_libraries -lc -lcap
 build_libraries-individual -lfll_error -lfll_execute -lfll_file -lfll_fss -lfll_print -lfll_program
-build_libraries-individual -lfl_control_group -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_iki -lfl_path -lfl_print -lfl_string
-build_libraries-individual -lf_account -lf_capability -lf_color -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_iki -lf_limit -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_thread -lf_type_array -lf_utf
+build_libraries-individual -lfl_control_group -lfl_conversion -lfl_directory -lfl_environment -lfl_fss -lfl_iki -lfl_path -lfl_print
+build_libraries-individual -lf_account -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_iki -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_thread -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index a3d6be43ff44d89d6721d75c72a1a62c0b8968f6..3e4fb7c7683f5a528dffce8f8c8afd504123ad0d 100644 (file)
@@ -178,15 +178,15 @@ extern "C" {
 
             index = main->parameters.remaining.array[i];
 
-            if (fl_string_dynamic_compare(firewall_show_nat_s, data.argv[index]) == F_equal_to) {
+            if (f_compare_dynamic(firewall_show_nat_s, data.argv[index]) == F_equal_to) {
               show_nat = F_true;
             }
             else {
-              if (fl_string_dynamic_compare(firewall_show_mangle_s, data.argv[index]) == F_equal_to) {
+              if (f_compare_dynamic(firewall_show_mangle_s, data.argv[index]) == F_equal_to) {
                 show_mangle = F_true;
               }
               else {
-                if (fl_string_dynamic_compare(firewall_show_ports_s, data.argv[index]) == F_equal_to) {
+                if (f_compare_dynamic(firewall_show_ports_s, data.argv[index]) == F_equal_to) {
                   show_ports = F_true;
                 }
                 else {
@@ -331,7 +331,7 @@ extern "C" {
 
         for (; i < data.devices.used; ++i) {
 
-          if (fl_string_dynamic_compare(firewall_device_loop_s, data.devices.array[i]) == F_equal_to) {
+          if (f_compare_dynamic(firewall_device_loop_s, data.devices.array[i]) == F_equal_to) {
             f_string_static_t swap_string = data.devices.array[i];
 
             --data.devices.used;
@@ -367,11 +367,11 @@ extern "C" {
 
         for (f_array_length_t i = 0; i < local.chain_objects.used; ++i) {
 
-          if (!reserved.has_stop && fl_string_dynamic_partial_compare_string(firewall_group_stop_s.string, local.buffer, firewall_group_stop_s.used, local.chain_objects.array[i]) == F_equal_to) {
+          if (!reserved.has_stop && f_compare_dynamic_partial_string(firewall_group_stop_s.string, local.buffer, firewall_group_stop_s.used, local.chain_objects.array[i]) == F_equal_to) {
             reserved.stop_at = i;
             reserved.has_stop = F_true;
           }
-          else if (!reserved.has_lock && fl_string_dynamic_partial_compare_string(firewall_group_lock_s.string, local.buffer, firewall_group_lock_s.used, local.chain_objects.array[i]) == F_equal_to) {
+          else if (!reserved.has_lock && f_compare_dynamic_partial_string(firewall_group_lock_s.string, local.buffer, firewall_group_lock_s.used, local.chain_objects.array[i]) == F_equal_to) {
             reserved.lock_at = i;
             reserved.has_lock = F_true;
           }
index 3fc3b5f18686d4e92466b3547bd1233effe393e2..eb92ecdf6caf376c3a020fa8d53670419d7a5cd8 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/execute.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
-#include <fll/level_1/string.h>
 #include <fll/level_1/print.h>
 
 // FLL-2 includes.
index 8bc53df18ee0b9eaa2389756251078c9a80533da..031c2ea2074bab2ba6a02cd2e62e5de4648c5716 100644 (file)
@@ -83,7 +83,7 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     ip_list.used = 0;
 
     // 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 (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_chain_s, length) == F_equal_to) {
       if (chain == firewall_chain_custom_id_e) {
 
         // Custom chains can only apply to themselves, so silently ignore chain commands specified within a custom chain.
@@ -97,22 +97,22 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
       if (local->rule_contents.array[i].used <= 0 || local->rule_contents.array[i].used > 1) {
         invalid = F_true;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_input_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_input_s, length) == F_equal_to) {
         chain = firewall_chain_input_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_output_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_output_s, length) == F_equal_to) {
         chain = firewall_chain_output_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_forward_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_forward_s, length) == F_equal_to) {
         chain = firewall_chain_forward_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_postrouting_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_postrouting_s, length) == F_equal_to) {
         chain = firewall_chain_postrouting_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_prerouting_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_prerouting_s, length) == F_equal_to) {
         chain = firewall_chain_prerouting_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_none_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_chain_none_s, length) == F_equal_to) {
         chain = firewall_chain_none_id_e;
       }
       else {
@@ -123,19 +123,19 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     }
 
     // Process direction rule
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_direction_s, length) == F_equal_to) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_direction_s, length) == F_equal_to) {
       length = (local->rule_contents.array[i].array[0].stop - local->rule_contents.array[i].array[0].start) + 1;
 
       if (local->rule_contents.array[i].used <= 0 || local->rule_contents.array[i].used > 1) {
         invalid = F_true;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_direction_input_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_direction_input_s, length) == F_equal_to) {
         direction = firewall_direction_input_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_direction_output_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_direction_output_s, length) == F_equal_to) {
         direction = firewall_direction_output_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_direction_none_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_direction_none_s, length) == F_equal_to) {
         direction = firewall_direction_none_id_e;
       }
       else {
@@ -148,18 +148,18 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     }
 
     // Process device rule.
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_device_s, length) == F_equal_to) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_device_s, length) == F_equal_to) {
       length = (local->rule_contents.array[i].array[0].stop - local->rule_contents.array[i].array[0].start) + 1;
 
       if (local->rule_contents.array[i].used <= 0 || local->rule_contents.array[i].used > 1) {
         invalid = F_true;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_device_all_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_device_all_s, length) == F_equal_to) {
         f_string_dynamic_resize(0, &device);
 
         continue;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_device_this_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_device_this_s, length) == F_equal_to) {
         if (data->devices.array[local->device].used) {
           if (data->devices.array[local->device].used > device.size) {
             status = f_string_dynamic_resize(data->devices.array[local->device].used, &device);
@@ -191,22 +191,22 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     }
 
     // Process action rule.
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_action_s, length) == F_equal_to) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_action_s, length) == F_equal_to) {
       length = (local->rule_contents.array[i].array[0].stop - local->rule_contents.array[i].array[0].start) + 1;
 
       if (local->rule_contents.array[i].used <= 0 || local->rule_contents.array[i].used > 1) {
         invalid = F_true;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_append_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_append_s, length) == F_equal_to) {
         action = firewall_action_append_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_insert_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_insert_s, length) == F_equal_to) {
         action = firewall_action_insert_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_policy_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_policy_s, length) == F_equal_to) {
         action = firewall_action_policy_id_e;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_none_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_action_none_s, length) == F_equal_to) {
         action = firewall_action_none_id_e;
       }
       else {
@@ -217,28 +217,28 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     }
 
     // Process ip_list rule.
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_ip_list, length) == F_equal_to) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_ip_list, length) == F_equal_to) {
       length = (local->rule_contents.array[i].array[0].stop - local->rule_contents.array[i].array[0].start) + 1;
       is_ip_list = F_true;
 
-      if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_ip_list_source_s, length) == F_equal_to) {
+      if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_ip_list_source_s, length) == F_equal_to) {
         ip_list_direction = F_false;
       }
-      else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_ip_list_destination_s, length) == F_equal_to) {
+      else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_ip_list_destination_s, length) == F_equal_to) {
         ip_list_direction = F_true;
       }
       else {
         invalid = F_true;
       }
     }
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_protocol_s, length) == F_equal_to) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_protocol_s, length) == F_equal_to) {
       length = (local->rule_contents.array[i].array[0].stop - local->rule_contents.array[i].array[0].start) + 1;
 
       if (local->rule_contents.array[i].used <= 0 || local->rule_contents.array[i].used > 1) {
         invalid = F_true;
       }
       else {
-        if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_protocol_none_s, length) == F_equal_to) {
+        if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_protocol_none_s, length) == F_equal_to) {
           use_protocol = F_false;
         }
         else if (length) {
@@ -259,24 +259,24 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     }
 
     // Process tool rule.
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_tool_s, length) == F_equal_to) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_tool_s, length) == F_equal_to) {
       length = (local->rule_contents.array[i].array[0].stop - local->rule_contents.array[i].array[0].start) + 1;
 
       if (local->rule_contents.array[i].used <= 0 || local->rule_contents.array[i].used > 1) {
         invalid = F_true;
       }
       else {
-        if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_tool_iptables_s, length) == F_equal_to) {
+        if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_tool_iptables_s, length) == F_equal_to) {
           tool = firewall_program_iptables_e;
           current_tool = firewall_tool_iptables_s;
           repeat = 1;
         }
-        else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_tool_ip6tables_s, length) == F_equal_to) {
+        else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_tool_ip6tables_s, length) == F_equal_to) {
           tool = firewall_program_ip6tables_e;
           current_tool = firewall_tool_ip6tables_s;
           repeat = 1;
         }
-        else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_tool_ip46tables_s, length) == F_equal_to) {
+        else if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_tool_ip46tables_s, length) == F_equal_to) {
           tool = firewall_program_ip46tables_e;
           current_tool = firewall_tool_iptables_s;
           repeat = 2;
@@ -290,7 +290,7 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
     }
 
     // If the remaining rule does not match as firewall_rule_s, then it is an invalid rule.
-    else if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_objects.array[i].start, firewall_rule_s, length) == F_equal_to_not) {
+    else if (f_compare_dynamic_string(local->buffer.string + local->rule_objects.array[i].start, firewall_rule_s, length) == F_equal_to_not) {
       if (length) {
         f_file_stream_lock(data->main->warning.to);
 
@@ -406,7 +406,7 @@ f_status_t firewall_perform_commands(firewall_data_t * const data, firewall_loca
 
       // Add the device if and only if a non-none direction is specified.
       if (device.used && (direction == firewall_direction_input_id_e || direction == firewall_direction_output_id_e)) {
-        if (fl_string_dynamic_compare_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_device_all_s, length) == F_equal_to_not) {
+        if (f_compare_dynamic_string(local->buffer.string + local->rule_contents.array[i].array[0].start, firewall_device_all_s, length) == F_equal_to_not) {
 
           status = f_string_dynamics_increase(firewall_default_allocation_step_d, &arguments);
           if (F_status_is_error(status)) break;
@@ -832,35 +832,35 @@ f_status_t firewall_create_custom_chains(firewall_data_t * const data, firewall_
     }
 
     // Skip globally reserved chain name: main.
-    if (fl_string_dynamic_partial_compare_string(firewall_group_main_s.string, local->buffer, firewall_group_main_s.used, local->chain_objects.array[i]) == F_equal_to) {
+    if (f_compare_dynamic_partial_string(firewall_group_main_s.string, local->buffer, firewall_group_main_s.used, local->chain_objects.array[i]) == F_equal_to) {
       new_chain = F_false;
       reserved->has_main = F_true;
       reserved->main_at = i;
     }
 
     // Skip globally reserved chain name: stop.
-    if (fl_string_dynamic_partial_compare_string(firewall_group_stop_s.string, local->buffer, firewall_group_stop_s.used, local->chain_objects.array[i]) == F_equal_to) {
+    if (f_compare_dynamic_partial_string(firewall_group_stop_s.string, local->buffer, firewall_group_stop_s.used, local->chain_objects.array[i]) == F_equal_to) {
       new_chain = F_false;
       reserved->has_stop = F_true;
       reserved->stop_at = i;
     }
 
     // Skip globally reserved chain name: lock.
-    if (fl_string_dynamic_partial_compare_string(firewall_group_lock_s.string, local->buffer, firewall_group_lock_s.used, local->chain_objects.array[i]) == F_equal_to) {
+    if (f_compare_dynamic_partial_string(firewall_group_lock_s.string, local->buffer, firewall_group_lock_s.used, local->chain_objects.array[i]) == F_equal_to) {
       new_chain = F_false;
       reserved->has_lock = F_true;
       reserved->lock_at = i;
     }
 
     // Skip globally reserved chain name: none.
-    if (fl_string_dynamic_partial_compare_string(firewall_chain_none_s.string, local->buffer, firewall_chain_none_s.used, local->chain_objects.array[i]) == F_equal_to) {
+    if (f_compare_dynamic_partial_string(firewall_chain_none_s.string, local->buffer, firewall_chain_none_s.used, local->chain_objects.array[i]) == F_equal_to) {
       new_chain = F_false;
     }
 
     if (new_chain) {
       for (; j < data->chains.used; ++j) {
 
-        if (fl_string_dynamic_partial_compare_string(data->chains.array[j].string, local->buffer, data->chains.array[j].used, local->chain_objects.array[i]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(data->chains.array[j].string, local->buffer, data->chains.array[j].used, local->chain_objects.array[i]) == F_equal_to) {
           new_chain = F_false;
           local->chain_ids.array[i] = j;
 
@@ -899,19 +899,19 @@ f_status_t firewall_create_custom_chains(firewall_data_t * const data, firewall_
       arguments.array[1].string[arguments.array[1].used] = 0;
       data->chains.array[data->chains.used].string[data->chains.array[data->chains.used].used] = 0;
 
-      if (fl_string_dynamic_compare(arguments.array[1], firewall_chain_forward_s) == F_equal_to) {
+      if (f_compare_dynamic(arguments.array[1], firewall_chain_forward_s) == F_equal_to) {
         create_chain = F_false;
       }
-      else if (fl_string_dynamic_compare(arguments.array[1], firewall_chain_input_s) == F_equal_to) {
+      else if (f_compare_dynamic(arguments.array[1], firewall_chain_input_s) == F_equal_to) {
         create_chain = F_false;
       }
-      else if (fl_string_dynamic_compare(arguments.array[1], firewall_chain_output_s) == F_equal_to) {
+      else if (f_compare_dynamic(arguments.array[1], firewall_chain_output_s) == F_equal_to) {
         create_chain = F_false;
       }
-      else if (fl_string_dynamic_compare(arguments.array[1], firewall_chain_postrouting_s) == F_equal_to) {
+      else if (f_compare_dynamic(arguments.array[1], firewall_chain_postrouting_s) == F_equal_to) {
         create_chain = F_false;
       }
-      else if (fl_string_dynamic_compare(arguments.array[1], firewall_chain_prerouting_s) == F_equal_to) {
+      else if (f_compare_dynamic(arguments.array[1], firewall_chain_prerouting_s) == F_equal_to) {
         create_chain = F_false;
       }
 
index 8c3a847fa1eaaf6f01289b6f5b0e4f36d0906dff..d106085ffc3e7c14d95a6451a10dce617d48b89d 100644 (file)
@@ -9,6 +9,7 @@ f_utf
 f_account
 f_capability
 f_color
+f_compare
 f_console
 f_control_group
 f_conversion
@@ -18,9 +19,11 @@ f_execute
 f_file
 f_fss
 f_limit
+f_parse
 f_path
 f_pipe
 f_print
+f_rip
 f_status_string
 f_signal
 f_thread
@@ -30,7 +33,6 @@ fl_conversion
 fl_environment
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_execute
index 745694a0541c3ac366f8fbe903eca19c7b43c2af..7d138124adb8ecc95bf0c1a0f8df6ed06e34dc9c 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lcap
-build_libraries-individual -lfll_error -lfll_execute -lfll_fss -lfll_print -lfll_program -lfl_control_group -lfl_conversion -lfl_environment -lfl_fss -lfl_print -lfl_string -lf_account -lf_capability -lf_color -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_limit -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_thread -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_execute -lfll_fss -lfll_print -lfll_program -lfl_control_group -lfl_conversion -lfl_environment -lfl_fss -lfl_print -lf_account -lf_capability -lf_color -lf_compare -lf_console -lf_control_group -lf_conversion -lf_directory -lf_environment -lf_execute -lf_file -lf_fss -lf_limit -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_thread -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 6eb506ecfac57b42014a10f0e57af5b1fc1e4d10..af379693d2145f2487202e41a0753dec13e07711 100644 (file)
@@ -243,13 +243,13 @@ extern "C" {
 
             break;
           }
-          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_basic_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
             data.delimit_mode = fss_basic_list_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_basic_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
             data.delimit_mode = fss_basic_list_read_delimit_mode_all_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_basic_list_read_delimit_mode_name_object_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_object_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_basic_list_read_delimit_mode_name_object_s.string, data.argv[index], fss_basic_list_read_delimit_mode_name_object_s.used) == F_equal_to) {
             switch (data.delimit_mode) {
               case 0:
                 data.delimit_mode = fss_basic_list_read_delimit_mode_object_e;
index 2433f82e30ee54d92753478a7c77d59f638f6ba2..e73a8f53ec464379f652f212dedb907627a08e39 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 094503593a0c0c5d59c182d413aa86244dfef46d..204237f568ce301d343cf6ae1d948c7cf2802267 100644 (file)
@@ -155,14 +155,14 @@ extern "C" {
           data->depths.array[i].index_name = main->parameters.array[fss_basic_list_read_parameter_name_e].values.array[position_name];
 
           if (main->parameters.array[fss_basic_list_read_parameter_trim_e].result & f_console_result_found_e) {
-            status = fl_string_dynamic_rip(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = f_rip_dynamic(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
           else {
             status = f_string_dynamic_append(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
 
           if (F_status_is_error(status)) {
-            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_basic_list_read_parameter_trim_e].result & f_console_result_found_e) ? "fl_string_dynamic_rip" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
+            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_basic_list_read_parameter_trim_e].result & f_console_result_found_e) ? "f_rip_dynamic" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
 
             return status;
           }
@@ -650,7 +650,7 @@ extern "C" {
       // This standard should always treat selected names as trimmed.
       for (f_array_length_t i = 0; i < data->objects.used; ++i) {
 
-        if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
+        if (f_compare_dynamic_partial_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
           names[i] = F_true;
         }
       } // for
index 03ce268ecd2485f5acfc92c26cc78192112e8023..6c9b008d3ff03bea0f0a869760e7c29b93a89c6b 100644 (file)
@@ -61,13 +61,13 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_string_append().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
  *   Errors (with error bit) from: fss_basic_list_read_depths_resize().
  *
  * @see f_string_append()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  *
  * @see fss_basic_list_read_depths_resize()
  */
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index a86aba4dcea05ad1d82a9a8ecc298ba507055cd2..8ef54e0e8a7aafec4b1792d20bb8ef51b065a213 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index afc1f4791325f84ada1e9ccb0d65ce617174dac5..f1c320c8fb687445d4528110d5bd6bd83524f340 100644 (file)
@@ -243,13 +243,13 @@ extern "C" {
 
             break;
           }
-          else if (fl_string_dynamic_compare(fss_basic_read_delimit_mode_name_none_s, data.argv[index]) == F_equal_to) {
+          else if (f_compare_dynamic(fss_basic_read_delimit_mode_name_none_s, data.argv[index]) == F_equal_to) {
             data.delimit_mode = fss_basic_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare(fss_basic_read_delimit_mode_name_all_s, data.argv[index]) == F_equal_to) {
+          else if (f_compare_dynamic(fss_basic_read_delimit_mode_name_all_s, data.argv[index]) == F_equal_to) {
             data.delimit_mode = fss_basic_read_delimit_mode_all_e;
           }
-          else if (fl_string_dynamic_compare(fss_basic_read_delimit_mode_name_object_s, data.argv[index]) == F_equal_to) {
+          else if (f_compare_dynamic(fss_basic_read_delimit_mode_name_object_s, data.argv[index]) == F_equal_to) {
             switch (data.delimit_mode) {
               case 0:
                 data.delimit_mode = fss_basic_read_delimit_mode_object_e;
index 7ce305da72b608b5de85e923e34f00801f2878ab..e9b69731c00cc4749efcd014de03eba9d83d82c7 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index f53644e54098ce0ad3cf9201e25185848c9ec46f..2818718a126c73a8b669479e8745d0a1f4bcf7d2 100644 (file)
@@ -132,14 +132,14 @@ extern "C" {
           data->depths.array[i].index_name = main->parameters.array[fss_basic_read_parameter_name_e].values.array[position_name];
 
           if (main->parameters.array[fss_basic_read_parameter_trim_e].result & f_console_result_found_e) {
-            status = fl_string_dynamic_rip(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = f_rip_dynamic(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
           else {
             status = f_string_dynamic_append(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
 
           if (F_status_is_error(status)) {
-            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_basic_read_parameter_trim_e].result & f_console_result_found_e) ? "fl_string_dynamic_rip" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
+            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_basic_read_parameter_trim_e].result & f_console_result_found_e) ? "f_rip_dynamic" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
 
             return status;
           }
@@ -544,7 +544,7 @@ extern "C" {
       if (data->option & fss_basic_read_data_option_trim_d) {
         for (i = 0; i < data->objects.used; ++i) {
 
-          if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits) == F_equal_to) {
+          if (f_compare_dynamic_partial_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits) == F_equal_to) {
             names[i] = F_true;
           }
         } // for
@@ -552,7 +552,7 @@ extern "C" {
       else {
         for (i = 0; i < data->objects.used; ++i) {
 
-           if (fl_string_dynamic_partial_compare_except_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits) == F_equal_to) {
+           if (f_compare_dynamic_partial_except_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits) == F_equal_to) {
             names[i] = F_true;
           }
         } // for
index 0599b5a8a6bb24b9fe995e39a5159c2d293dd14c..c9b2128799f29cee3da8a7baf0eac108c46ce585 100644 (file)
@@ -45,13 +45,13 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_string_append().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
  *   Errors (with error bit) from: fss_basic_read_depths_resize().
  *
  * @see f_string_append()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  *
  * @see fss_basic_read_depths_resize()
  */
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index cdcd002e7a8a6467bc861d5fb96231d0f62ee494..93b37a28df700c42397a5c0141492a120d58c3db 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_rip -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_compare -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 8451edf6352b3bfa7ee24573ec74ee9ec81f40e7..035e9ef67237e0b38d53273a90059260988d2416 100644 (file)
@@ -209,10 +209,10 @@ extern "C" {
 
             status = F_status_set_error(F_parameter);
           }
-          else if (fl_string_dynamic_compare_string(fss_embedded_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_embedded_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_embedded_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_embedded_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
             data.delimit_mode = fss_embedded_list_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_embedded_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_embedded_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_embedded_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_embedded_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
             data.delimit_mode = fss_embedded_list_read_delimit_mode_all_e;
           }
           else {
index 8d59c0cec1be163a915d00634889b9a095ddf82c..e8d2e8955559c734c668576c5671efc4a047966c 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index db269dbcc252813b44db9232cbd9ef4b57417208..1929502e6e3084e4f70f11150d587c33352b1dc1 100644 (file)
@@ -177,10 +177,10 @@ extern "C" {
           depths->array[depths->used].value_name.used = 0;
 
           if (data->main->parameters.array[fss_embedded_list_read_parameter_trim_e].result & f_console_result_found_e) {
-            status = fl_string_dynamic_rip(argv[values_order[i]], &depths->array[depths->used].value_name);
+            status = f_rip_dynamic(argv[values_order[i]], &depths->array[depths->used].value_name);
 
             if (F_status_is_error(status)) {
-              fll_error_print(data->main->error, F_status_set_fine(status), "fl_string_dynamic_rip", fll_error_file_flag_fallback_e);
+              fll_error_print(data->main->error, F_status_set_fine(status), "f_rip_dynamic", fll_error_file_flag_fallback_e);
 
               return status;
             }
@@ -389,12 +389,12 @@ extern "C" {
 
             if (data->main->parameters.array[fss_embedded_list_read_parameter_trim_e].result & f_console_result_found_e) {
 
-              if (fl_string_dynamic_partial_compare_except_trim_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[depths.array[depths_index].value_at].object, except_none, *objects_delimits) != F_equal_to) {
+              if (f_compare_dynamic_partial_except_trim_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[depths.array[depths_index].value_at].object, except_none, *objects_delimits) != F_equal_to) {
                 skip[depths.array[depths_index].value_at] = F_true;
               }
             }
             else {
-              if (fl_string_dynamic_partial_compare_except_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[depths.array[depths_index].value_at].object, except_none, *objects_delimits) != F_equal_to) {
+              if (f_compare_dynamic_partial_except_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[depths.array[depths_index].value_at].object, except_none, *objects_delimits) != F_equal_to) {
                 skip[depths.array[depths_index].value_at] = F_true;
               }
             }
@@ -407,7 +407,7 @@ extern "C" {
 
             if (skip[i]) continue;
 
-            if (fl_string_dynamic_partial_compare_except_trim_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[i].object, except_none, *objects_delimits) != F_equal_to) {
+            if (f_compare_dynamic_partial_except_trim_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[i].object, except_none, *objects_delimits) != F_equal_to) {
               skip[i] = F_true;
             }
           } // for
@@ -417,7 +417,7 @@ extern "C" {
 
             if (skip[i]) continue;
 
-            if (fl_string_dynamic_partial_compare_except_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[i].object, except_none, *objects_delimits) != F_equal_to) {
+            if (f_compare_dynamic_partial_except_dynamic(depths.array[depths_index].value_name, data->buffer, items->array[i].object, except_none, *objects_delimits) != F_equal_to) {
               skip[i] = F_true;
             }
           } // for
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index 6fddecc855e2a9c8021e3446b828fad0e912c6b1..8d2a9d3bf3c5fb84f2eadfd9f96887b3f6d837ff 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index b03c7c7fd90d1fc5421eed4b4c7af3931549dfc7..fa53424f986a94d04bc46d266ec6f6700ea22d1e 100644 (file)
@@ -243,13 +243,13 @@ extern "C" {
 
             break;
           }
-          else if (fl_string_dynamic_compare_string(fss_extended_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_extended_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_extended_list_read_delimit_mode_name_none_s.string, data.argv[index], fss_extended_list_read_delimit_mode_name_none_s.used) == F_equal_to) {
             data.delimit_mode = fss_extended_list_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_extended_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_extended_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_extended_list_read_delimit_mode_name_all_s.string, data.argv[index], fss_extended_list_read_delimit_mode_name_all_s.used) == F_equal_to) {
             data.delimit_mode = fss_extended_list_read_delimit_mode_all_e;
           }
-          else if (fl_string_dynamic_compare_string(fss_extended_list_read_delimit_mode_name_object_s.string, data.argv[index], fss_extended_list_read_delimit_mode_name_object_s.used) == F_equal_to) {
+          else if (f_compare_dynamic_string(fss_extended_list_read_delimit_mode_name_object_s.string, data.argv[index], fss_extended_list_read_delimit_mode_name_object_s.used) == F_equal_to) {
             switch (data.delimit_mode) {
               case 0:
                 data.delimit_mode = fss_extended_list_read_delimit_mode_object_e;
index b0fb05eed4c424283183a69cea345bf52dab6900..e2c2bcbc46faeb35b14ec9c3a91fc1b3d6286901 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index f7b1d3446ff88173c1e08d5d70d05f8b56a375c0..b1866703e0fd4bd29da1ee0a0818f68b410d100b 100644 (file)
@@ -155,14 +155,14 @@ extern "C" {
           data->depths.array[i].index_name = main->parameters.array[fss_extended_list_read_parameter_name_e].values.array[position_name];
 
           if (main->parameters.array[fss_extended_list_read_parameter_trim_e].result & f_console_result_found_e) {
-            status = fl_string_dynamic_rip(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = f_rip_dynamic(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
           else {
             status = f_string_dynamic_append(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
 
           if (F_status_is_error(status)) {
-            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_extended_list_read_parameter_trim_e].result & f_console_result_found_e) ? "fl_string_dynamic_rip" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
+            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_extended_list_read_parameter_trim_e].result & f_console_result_found_e) ? "f_rip_dynamic" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
 
             return status;
           }
@@ -636,7 +636,7 @@ extern "C" {
       // This standard should always treat selected names as trimmed.
       for (i = 0; i < data->objects.used; ++i) {
 
-        if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
+        if (f_compare_dynamic_partial_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
           names[i] = F_true;
         }
       } // for
index e169488cf05ee02dccc0a55725574fd09db7c1bb..579070493de1c8b6487573559cffe59c97bf862a 100644 (file)
@@ -59,13 +59,13 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_string_append().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
  *   Errors (with error bit) from: fss_extended_list_read_depths_resize().
  *
  * @see f_string_append()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  *
  * @see fss_extended_list_read_depths_resize()
  */
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index 79e0fea75128ffc000baf77b095c0928176d9d51..cbc14987c36a935f1371dc370f55c0be1ab5c8b7 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index ab7645119fc2846338e86e89bd1b20ec683f2253..5b352b02902a9f50bb666b744cca7e9d3163340a 100644 (file)
@@ -242,13 +242,13 @@ extern "C" {
 
             break;
           }
-          else if (fl_string_dynamic_compare(data.argv[index], fss_extended_read_delimit_mode_name_none_s) == F_equal_to) {
+          else if (f_compare_dynamic(data.argv[index], fss_extended_read_delimit_mode_name_none_s) == F_equal_to) {
             data.delimit_mode = fss_extended_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare(data.argv[index], fss_extended_read_delimit_mode_name_all_s) == F_equal_to) {
+          else if (f_compare_dynamic(data.argv[index], fss_extended_read_delimit_mode_name_all_s) == F_equal_to) {
             data.delimit_mode = fss_extended_read_delimit_mode_all_e;
           }
-          else if (fl_string_dynamic_compare(data.argv[index], fss_extended_read_delimit_mode_name_object_s) == F_equal_to) {
+          else if (f_compare_dynamic(data.argv[index], fss_extended_read_delimit_mode_name_object_s) == F_equal_to) {
             switch (data.delimit_mode) {
               case 0:
                 data.delimit_mode = fss_extended_read_delimit_mode_object_e;
index be4fe40b20cffc3de97ea052a326977e4af6dd51..5d03807884a0611c96178ec21f3225e7991afcb8 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 84d2c9cab1d538722c8d9f44710b662d78c2ff12..30a18a30d6cea9a7ef6da26daebeb79ab71973c0 100644 (file)
@@ -159,14 +159,14 @@ extern "C" {
           data->depths.array[i].index_name = main->parameters.array[fss_extended_read_parameter_name_e].values.array[position_name];
 
           if (main->parameters.array[fss_extended_read_parameter_trim_e].result & f_console_result_found_e) {
-            status = fl_string_dynamic_rip(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = f_rip_dynamic(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
           else {
             status = f_string_dynamic_append(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
 
           if (F_status_is_error(status)) {
-            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_extended_read_parameter_trim_e].result & f_console_result_found_e) ? "fl_string_dynamic_rip" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
+            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_extended_read_parameter_trim_e].result & f_console_result_found_e) ? "f_rip_dynamic" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
 
             return status;
           }
@@ -576,7 +576,7 @@ extern "C" {
       if (data->option & fss_extended_read_data_option_trim_d) {
         for (i = 0; i < data->objects.used; ++i) {
 
-          if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
+          if (f_compare_dynamic_partial_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
             names[i] = F_true;
           }
         } // for
@@ -584,7 +584,7 @@ extern "C" {
       else {
         for (i = 0; i < data->objects.used; ++i) {
 
-           if (fl_string_dynamic_partial_compare_except_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_content) == F_equal_to) {
+           if (f_compare_dynamic_partial_except_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_content) == F_equal_to) {
             names[i] = F_true;
           }
         } // for
index f248bf1b84dcff5f5af4739924aa66e4782a0eb9..4a1133788647de28849bd92e7c48cc40809ac018 100644 (file)
@@ -59,13 +59,13 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_string_append().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
  *   Errors (with error bit) from: fss_extended_read_depths_resize().
  *
  * @see f_string_append()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  *
  * @see fss_extended_read_depths_resize()
  */
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index 2c3c037689df561526a0ad9414b86ed3ca2288e2..2bc3615649dffa9eaf70c7ac8eeeccec1c5b4531 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 1d846bcacc782028b539e4943d1e683d1227281d..b0a0b26354a5440a44430cf1763e9d5e0f204497 100644 (file)
@@ -24,6 +24,7 @@
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 6c23d6860e4fe06a7fb9bef8efd839681a7282ad..604bedb4f217a0483cbb62d390d9cbf1646fd1fe 100644 (file)
@@ -186,10 +186,10 @@ extern "C" {
         range.start = 0;
       }
 
-      return fl_string_dynamic_partial_compare_string((const f_string_t) id.name, data->name, id.used, range);
+      return f_compare_dynamic_partial_string((const f_string_t) id.name, data->name, id.used, range);
     }
 
-    return fl_string_dynamic_compare_string((const f_string_t) id.name, data->name, id.used);
+    return f_compare_dynamic_string((const f_string_t) id.name, data->name, id.used);
   }
 #endif // _di_fss_identify_process_name_compare_
 
index 1f50f7320faed769dd883c004572be5dbeba8194..23cbc654bfaa2e87ebb92ea3dc12f8b56b60d36c 100644 (file)
@@ -84,10 +84,10 @@ extern "C" {
  *   F_false on no match.
  *
  *   Errors (with error bit) from fl_conversion_dynamic_partial_to_hexidecimal_unsigned().
- *   Errors (with error bit) from fl_string_dynamic_compare_string().
+ *   Errors (with error bit) from f_compare_dynamic_string().
  *
  * @see fl_conversion_dynamic_partial_to_hexidecimal_unsigned()
- * @see fl_string_dynamic_compare_string()
+ * @see f_compare_dynamic_string()
  */
 #ifndef _di_fss_identify_process_name_compare_
   f_status_t fss_identify_process_name_compare(fss_identify_data_t * const data, const f_fll_id_t id, const uint8_t mode) F_attribute_visibility_internal_d;
index ad384b7e151ca752507b89eb9ccdf7e13d461c33..6d49db2a2742dddbdbf130e532b848a2451771c1 100644 (file)
@@ -7,18 +7,20 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_fss
index 9c6bbcfa28d377463c0c7f688b76e3a0dd5ef75c..521026c84b24e1bc99b207a7f5b014bf4a96b819 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_fss -lf_memory -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_fss -lfl_print -lf_color -lf_console -lf_conversion -lf_file -lf_fss -lf_memory -lf_parse -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 4073620e8cf13262de855e2c23d8d59d622accd4..4d1d7e27c090b2f4612e7833c06b38d9e157abce 100644 (file)
@@ -258,13 +258,13 @@ extern "C" {
 
             break;
           }
-          else if (fl_string_dynamic_compare(data.argv[index], fss_payload_read_delimit_mode_name_none_s) == F_equal_to) {
+          else if (f_compare_dynamic(data.argv[index], fss_payload_read_delimit_mode_name_none_s) == F_equal_to) {
             data.delimit_mode = fss_payload_read_delimit_mode_none_e;
           }
-          else if (fl_string_dynamic_compare(data.argv[index], fss_payload_read_delimit_mode_name_all_s) == F_equal_to) {
+          else if (f_compare_dynamic(data.argv[index], fss_payload_read_delimit_mode_name_all_s) == F_equal_to) {
             data.delimit_mode = fss_payload_read_delimit_mode_all_e;
           }
-          else if (fl_string_dynamic_compare(data.argv[index], fss_payload_read_delimit_mode_name_object_s) == F_equal_to) {
+          else if (f_compare_dynamic(data.argv[index], fss_payload_read_delimit_mode_name_object_s) == F_equal_to) {
             switch (data.delimit_mode) {
               case 0:
                 data.delimit_mode = fss_payload_read_delimit_mode_object_e;
index 914df7404abb1cd8ebaa0282dd15e2724d1ca2cd..81ef3a89d5c8f2dd85813c0f44d192cbeb2ea798 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/directory.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index d7d81c6132e0beb78d7d168a4def92c9f240a7ab..b7e6b63805b852779ac54dcba6e6e2abb4c70247 100644 (file)
@@ -155,14 +155,14 @@ extern "C" {
           data->depths.array[i].index_name = main->parameters.array[fss_payload_read_parameter_name_e].values.array[position_name];
 
           if (main->parameters.array[fss_payload_read_parameter_trim_e].result & f_console_result_found_e) {
-            status = fl_string_dynamic_rip(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
+            status = f_rip_dynamic(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
           else {
             status = f_string_dynamic_append(data->argv[data->depths.array[i].index_name], &data->depths.array[i].value_name);
           }
 
           if (F_status_is_error(status)) {
-            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_payload_read_parameter_trim_e].result & f_console_result_found_e) ? "fl_string_dynamic_rip" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
+            fll_error_print(main->error, F_status_set_fine(status), (main->parameters.array[fss_payload_read_parameter_trim_e].result & f_console_result_found_e) ? "f_rip_dynamic" : "f_string_dynamic_append", fll_error_file_flag_fallback_e);
 
             return status;
           }
@@ -277,7 +277,7 @@ extern "C" {
     // Load the "header" information.
     for (f_array_length_t i = 0; i < data->objects.used; ++i) {
 
-      if (fl_string_dynamic_partial_compare_string(F_fss_header_s, data->buffer, F_fss_string_header_s_length, data->objects.array[i]) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(F_fss_header_s, data->buffer, F_fss_string_header_s_length, data->objects.array[i]) == F_equal_to) {
         f_string_range_t input_header = data->contents.array[i].array[0];
 
         status = fll_fss_extended_read(data->buffer, state, &input_header, &data->objects_header, &data->contents_header, &data->quotes_object_header, &data->quotes_content_header, &data->delimits_object_header, &data->delimits_content_header);
@@ -351,7 +351,7 @@ extern "C" {
       // For "headers" FSS-0001 Extended, only operate if the "header" name is true.
       for (f_array_length_t i = 0; i < data->objects.used; ++i) {
 
-        if (fl_string_dynamic_partial_compare_string(F_fss_header_s, data->buffer, F_fss_string_header_s_length, data->objects.array[i]) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(F_fss_header_s, data->buffer, F_fss_string_header_s_length, data->objects.array[i]) == F_equal_to) {
           if (names[i]) break;
 
           if (main->parameters.array[fss_payload_read_parameter_total_e].result & f_console_result_found_e) {
@@ -446,7 +446,7 @@ extern "C" {
         main->signal_check = 0;
       }
 
-      is_payload = fl_string_dynamic_partial_compare_string(f_fss_payload_s.string, data->buffer, f_fss_payload_s.used, data->objects.array[i]) == F_equal_to;
+      is_payload = f_compare_dynamic_partial_string(f_fss_payload_s.string, data->buffer, f_fss_payload_s.used, data->objects.array[i]) == F_equal_to;
 
       fss_payload_read_print_at(main, is_payload, i, *delimits_object, *delimits_content, data);
     } // for
@@ -520,7 +520,7 @@ extern "C" {
           f_file_stream_unlock(main->output.to);
         }
         else {
-          is_payload = fl_string_dynamic_partial_compare_string(f_fss_payload_s.string, data->buffer, f_fss_payload_s.used, data->objects.array[i]) == F_equal_to;
+          is_payload = f_compare_dynamic_partial_string(f_fss_payload_s.string, data->buffer, f_fss_payload_s.used, data->objects.array[i]) == F_equal_to;
 
           fss_payload_read_print_at(main, is_payload, i, *delimits_object, *delimits_content, data);
         }
@@ -953,7 +953,7 @@ extern "C" {
       // This standard should always treat selected names as trimmed.
       for (i = 0; i < data->objects.used; ++i) {
 
-        if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
+        if (f_compare_dynamic_partial_except_trim_dynamic(data->depths.array[0].value_name, data->buffer, data->objects.array[i], except_none, data->delimits_object) == F_equal_to) {
           names[i] = F_true;
         }
       } // for
@@ -979,7 +979,7 @@ extern "C" {
       if (data->option & fss_payload_read_data_option_trim_d) {
         for (i = 0; i < data->objects_header.used; ++i) {
 
-          if (fl_string_dynamic_partial_compare_except_trim_dynamic(data->depths.array[data->depths.used - 1].value_name, data->buffer, data->objects_header.array[i], except_none, data->delimits_object_header) == F_equal_to) {
+          if (f_compare_dynamic_partial_except_trim_dynamic(data->depths.array[data->depths.used - 1].value_name, data->buffer, data->objects_header.array[i], except_none, data->delimits_object_header) == F_equal_to) {
             names[i] = F_true;
           }
         } // for
@@ -987,7 +987,7 @@ extern "C" {
       else {
         for (i = 0; i < data->objects_header.used; ++i) {
 
-           if (fl_string_dynamic_partial_compare_except_dynamic(data->depths.array[data->depths.used - 1].value_name, data->buffer, data->objects_header.array[i], except_none, data->delimits_content_header) == F_equal_to) {
+           if (f_compare_dynamic_partial_except_dynamic(data->depths.array[data->depths.used - 1].value_name, data->buffer, data->objects_header.array[i], except_none, data->delimits_content_header) == F_equal_to) {
             names[i] = F_true;
           }
         } // for
index b6826179666b4ee65d7c902ab99fff6fe993e17a..0665a165cdaf19146100de901ad75a4337a523c8 100644 (file)
@@ -63,13 +63,13 @@ extern "C" {
  *
  *   Errors (with error bit) from: f_string_append().
  *   Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
- *   Errors (with error bit) from: fl_string_dynamic_rip().
+ *   Errors (with error bit) from: f_rip_dynamic().
  *
  *   Errors (with error bit) from: fss_payload_read_depths_resize().
  *
  * @see f_string_append()
  * @see fl_conversion_dynamic_partial_to_unsigned_detect()
- * @see fl_string_dynamic_rip()
+ * @see f_rip_dynamic()
  *
  * @see fss_payload_read_depths_resize()
  */
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index 728c203ef2488a1e88a7dd9056a80e5924394092..61811366cdbf21e9346bbfec43958e8f492b9434 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 7ac9851f5da70d4f2fed69be2a9d98d9568eb1bf..93fdfa83a5f7b657fb4116c5ca1ef87baaf5af7f 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss/basic.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index fe27f9f7583b64eaed4503c617c1caf916a2b2f6..b311f8d8a82fde4810d14c96eade4bea5b28152d 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss/basic_list.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 35e18191cf7f7ebb8831a0a022dce779c9c096f5..ff1fe6d33779f9f8f47652d5b2fa6bafcd46caf7 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss/embedded_list.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 3e254057d11625df6496fdcd36d768b02191048c..ecec6091639d32ef651b510194f91b1dbe561fdb 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss/extended.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 9262924ff8ca4ff397c9b41cbf8c6bb63b977b3b..6742a8d93ff7c664f16d6d32ae0a67a4cb6359f6 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss/extended_list.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index fa48535f4caeead8f4af99fe6f674793ab1054c4..0dea37986c59bc46f76a40a2ef27f09f9ae01802 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 38586b767333c1734cc60d34ab38b389ecb684a0..a47d77f2159f15271ab500cff2d868eb8b15de6c 100644 (file)
@@ -84,9 +84,9 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
 
         index = main->program.parameters.array[fss_write_parameter_as_e].values.array[i];
 
-        if (fl_string_dynamic_compare(argv[index], fss_write_format_code_short_0000_s) == F_equal_to ||
-            fl_string_dynamic_compare(argv[index], fss_write_format_code_long_0000_s) == F_equal_to ||
-            fl_string_dynamic_compare(argv[index], fss_write_format_code_human_0000_s) == F_equal_to) {
+        if (f_compare_dynamic(argv[index], fss_write_format_code_short_0000_s) == F_equal_to ||
+            f_compare_dynamic(argv[index], fss_write_format_code_long_0000_s) == F_equal_to ||
+            f_compare_dynamic(argv[index], fss_write_format_code_human_0000_s) == F_equal_to) {
 
           main->setting.standard = fss_write_basic_standard_s;
           main->setting.process_content = &fss_write_basic_process_content;
@@ -98,9 +98,9 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           main->setting.flag -= main->setting.flag & fss_write_main_flag_ignore_e; // Not supported by basic.
           main->setting.flag -= main->setting.flag & fss_write_main_flag_content_multiple_e; // Not supported by basic.
         }
-        else if (fl_string_dynamic_compare(argv[index], fss_write_format_code_short_0001_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_long_0001_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_human_0001_s) == F_equal_to) {
+        else if (f_compare_dynamic(argv[index], fss_write_format_code_short_0001_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_long_0001_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_human_0001_s) == F_equal_to) {
 
           main->setting.standard = fss_write_extended_standard_s;
           main->setting.process_content = &fss_write_extended_process_content;
@@ -112,9 +112,9 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           main->setting.flag -= main->setting.flag & fss_write_main_flag_ignore_e; // Not supported by extended.
           main->setting.flag |= fss_write_main_flag_content_multiple_e;
         }
-        else if (fl_string_dynamic_compare(argv[index], fss_write_format_code_short_0002_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_long_0002_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_human_0002_s) == F_equal_to) {
+        else if (f_compare_dynamic(argv[index], fss_write_format_code_short_0002_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_long_0002_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_human_0002_s) == F_equal_to) {
 
           main->setting.standard = fss_write_basic_list_standard_s;
           main->setting.process_content = &fss_write_basic_list_process_content;
@@ -126,9 +126,9 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           main->setting.flag -= main->setting.flag & fss_write_main_flag_ignore_e; // Not supported by basic list.
           main->setting.flag -= main->setting.flag & fss_write_main_flag_content_multiple_e; // Not supported by basic list.
         }
-        else if (fl_string_dynamic_compare(argv[index], fss_write_format_code_short_0003_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_long_0003_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_human_0003_s) == F_equal_to) {
+        else if (f_compare_dynamic(argv[index], fss_write_format_code_short_0003_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_long_0003_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_human_0003_s) == F_equal_to) {
 
           main->setting.standard = fss_write_extended_list_standard_s;
           main->setting.process_content = &fss_write_extended_list_process_content;
@@ -140,9 +140,9 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           main->setting.flag |= fss_write_main_flag_ignore_e;
           main->setting.flag -= main->setting.flag & fss_write_main_flag_content_multiple_e; // Not supported by extended list.
         }
-        else if (fl_string_dynamic_compare(argv[index], fss_write_format_code_short_0008_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_long_0008_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_human_0008_s) == F_equal_to) {
+        else if (f_compare_dynamic(argv[index], fss_write_format_code_short_0008_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_long_0008_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_human_0008_s) == F_equal_to) {
 
           main->setting.standard = fss_write_embedded_list_standard_s;
           main->setting.process_content = &fss_write_embedded_list_process_content;
@@ -154,9 +154,9 @@ int main(const int argc, const f_string_t *argv, const f_string_t *envp) {
           main->setting.flag |= fss_write_main_flag_ignore_e;
           main->setting.flag |= fss_write_main_flag_content_multiple_e;
         }
-        else if (fl_string_dynamic_compare(argv[index], fss_write_format_code_short_000e_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_long_000e_s) == F_equal_to ||
-                 fl_string_dynamic_compare(argv[index], fss_write_format_code_human_000e_s) == F_equal_to) {
+        else if (f_compare_dynamic(argv[index], fss_write_format_code_short_000e_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_long_000e_s) == F_equal_to ||
+                 f_compare_dynamic(argv[index], fss_write_format_code_human_000e_s) == F_equal_to) {
 
           main->setting.standard = fss_write_payload_standard_s;
           main->setting.process_content = 0; // Not used by payload.
index cda9787795c1525996b718c9dfdb9b1a51d7b651..3c6a37602b232d4a7b925019b9512ea19e8f5da9 100644 (file)
@@ -215,7 +215,7 @@ extern "C" {
         }
 
         // When payload is provided, all data at this point is part of the payload until the end of the pipe.
-        if (fl_string_dynamic_compare(f_fss_payload_s, *main->setting.object) == F_equal_to) {
+        if (f_compare_dynamic(f_fss_payload_s, *main->setting.object) == F_equal_to) {
           if (total > 1) {
             main->setting.state.status = f_string_dynamic_increase_by(total, &main->setting.contents->array[main->setting.contents->used]);
 
@@ -551,7 +551,7 @@ extern "C" {
 
       for (f_array_length_t i = 0; i < values->used; ++i) {
 
-        if (fl_string_dynamic_compare(argv[values->array[i]], fss_write_payload_s) == F_equal_to && i + 1 < values->used) {
+        if (f_compare_dynamic(argv[values->array[i]], fss_write_payload_s) == F_equal_to && i + 1 < values->used) {
           main->setting.state.status = F_status_set_error(F_parameter);
 
           fss_write_payload_print_error_payload_not_last(&main->program.error);
index a2da5db518d39ecd91349a53007efa6934b7c46e..9ac3fd58ba58b74f0808a448a4e254c0e33340cf 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/fss.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/fss/basic_list.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 501d568a3dcb955195770ae900b9ad87d82138e2..22cdeb6031bce9039388f769bb9d72220351bd03 100644 (file)
@@ -7,20 +7,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_environment
 f_file
 f_fss
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_file
index dad28813c3c38602d971e0b2c93070fb362b1b9f..aa2338a096c508f433a84f6571d95cd2fe4162c0 100644 (file)
@@ -21,7 +21,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 47a3931167f167fad5eeed67393b2de1de23cd54..dca59fa555d12ac198552bbef776a35d657fdf59 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 3585ebf2464689e1a32bedd6f78d54023d386086..ba5a99918f9a8606f68943fa7ed0746a5f047cc9 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 70c9b0b86d678164f7d1d4e2d763d556655ff6eb..95bc87068a58ccb5d6782117ee316caeccefa98a 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index d6f46c06e25e659e627c339cd1b1f527a967f62d..3a7c1b37dfca2227e947f3a75fc3f056c506d904 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index d294bc31a137b67efe9936f1e35ba132d8cdc26b..21d25874c38e67a3b76c75bda85cc2e351e9285f 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 5fbc16773707fbe82d553676ae0af6b0425f33f7..6f889b02807d1660f423998c5348d9096e6fa494 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 30ddb338a9e6fa3787617385b91cc55c79d2dc1d..3df838ca06f0f88db98989300283bf5c7b451480 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lfss_write
-build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_file -lfll_fss -lfll_print -lfll_program -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_environment -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index ec40ecaed922424fe57dbe5596451ae89800e907..ca21a5d1792c44206383a4e90fd73f59aecf7714 100644 (file)
@@ -237,7 +237,7 @@ extern "C" {
       for (; i < values->used; ++i) {
 
         for (j = 0; j < main->setting.names.used; ++j) {
-          if (fl_string_dynamic_compare(main->program.parameters.arguments.array[values->array[i]], main->setting.names.array[j]) == F_equal_to) break;
+          if (f_compare_dynamic(main->program.parameters.arguments.array[values->array[i]], main->setting.names.array[j]) == F_equal_to) break;
         } // for
 
         if (j < main->setting.names.used) continue;
@@ -317,7 +317,7 @@ extern "C" {
         // Replace any existing value so that each name exists only once.
         for (j = 0; j < main->setting.replace.used; ++j) {
 
-          if (fl_string_dynamic_compare(main->program.parameters.arguments.array[index], main->setting.replace.array[j].name) == F_equal_to) {
+          if (f_compare_dynamic(main->program.parameters.arguments.array[index], main->setting.replace.array[j].name) == F_equal_to) {
             break;
           }
         } // for
@@ -412,7 +412,7 @@ extern "C" {
         // Replace any existing values so that each name exists only once.
         for (j = 0; j < main->setting.wrap.used; ++j) {
 
-          if (fl_string_dynamic_compare(main->program.parameters.arguments.array[index], main->setting.wrap.array[j].a) == F_equal_to) {
+          if (f_compare_dynamic(main->program.parameters.arguments.array[index], main->setting.wrap.array[j].a) == F_equal_to) {
             break;
           }
         } // for
@@ -663,8 +663,8 @@ extern "C" {
       // Replace any existing values so that each name and value pair exists only once.
       for (j = 0; j < triple->used; ++j) {
 
-        if (fl_string_dynamic_compare(main->program.parameters.arguments.array[index], triple->array[j].a) == F_equal_to) {
-          if (fl_string_dynamic_compare(main->program.parameters.arguments.array[parameter.values.array[i + 1]], triple->array[j].b) == F_equal_to) {
+        if (f_compare_dynamic(main->program.parameters.arguments.array[index], triple->array[j].a) == F_equal_to) {
+          if (f_compare_dynamic(main->program.parameters.arguments.array[parameter.values.array[i + 1]], triple->array[j].b) == F_equal_to) {
             break;
           }
         }
index 7d5a1ef7e9c24609d1c1fb4998b1269b7d4ba7f0..1781087e2cebca3772168d29cc37c56d85563185 100644 (file)
@@ -22,7 +22,7 @@ extern "C" {
           j = main->setting.replace.used - 1;
 
           do {
-            if (fl_string_dynamic_partial_compare_string(main->setting.replace.array[j].name.string, main->setting.buffer, main->setting.replace.array[j].name.used, main->setting.data.vocabulary.array[i]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(main->setting.replace.array[j].name.string, main->setting.buffer, main->setting.replace.array[j].name.used, main->setting.data.vocabulary.array[i]) == F_equal_to) {
               main->setting.map_replaces[i] = j;
 
               break;
@@ -37,7 +37,7 @@ extern "C" {
           j = main->setting.wrap.used - 1;
 
           do {
-            if (fl_string_dynamic_partial_compare_string(main->setting.wrap.array[j].a.string, main->setting.buffer, main->setting.wrap.array[j].a.used, main->setting.data.vocabulary.array[i]) == F_equal_to) {
+            if (f_compare_dynamic_partial_string(main->setting.wrap.array[j].a.string, main->setting.buffer, main->setting.wrap.array[j].a.used, main->setting.data.vocabulary.array[i]) == F_equal_to) {
               main->setting.map_wraps[i] = j;
 
               break;
@@ -68,8 +68,8 @@ extern "C" {
     f_array_length_t i = triple->used - 1;
 
     do {
-      if (fl_string_dynamic_partial_compare_string(triple->array[i].a.string, main->setting.buffer, triple->array[i].a.used, name) == F_equal_to) {
-        if (fl_string_dynamic_partial_compare_string(triple->array[i].b.string, main->setting.buffer, triple->array[i].b.used, value) == F_equal_to) {
+      if (f_compare_dynamic_partial_string(triple->array[i].a.string, main->setting.buffer, triple->array[i].a.used, name) == F_equal_to) {
+        if (f_compare_dynamic_partial_string(triple->array[i].b.string, main->setting.buffer, triple->array[i].b.used, value) == F_equal_to) {
           return i;
         }
       }
index 5a5e67e06261eccade5e9bef1f6e713af1bbeffe..c56ae7b0ca4aa966b630f6023ae1204dab5f5e8b 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/iki.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
@@ -42,7 +44,6 @@
 #include <fll/level_1/iki.h>
 #include <fll/level_1/print.h>
 #include <fll/level_1/signal.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 79e8d98200a8b34902212ac5c85eaeff021b4a3e..3cd3d5b02e4f661292d78998f1c86a92c44fb57a 100644 (file)
@@ -118,7 +118,7 @@ extern "C" {
 
         for (j = 0; j < main->setting.names.used; ++j) {
 
-          if (fl_string_dynamic_partial_compare_string(main->setting.names.array[j].string, main->setting.buffer, main->setting.names.array[j].used, main->setting.data.vocabulary.array[i]) == F_equal_to) {
+          if (f_compare_dynamic_partial_string(main->setting.names.array[j].string, main->setting.buffer, main->setting.names.array[j].used, main->setting.data.vocabulary.array[i]) == F_equal_to) {
             unmatched = F_false;
 
             if (main->setting.flag & iki_read_main_flag_at_e) {
@@ -251,7 +251,7 @@ extern "C" {
 
         if (main->setting.names.used) {
           for (k = 0; k < main->setting.names.used; ++k) {
-            if (fl_string_dynamic_partial_compare_string(main->setting.names.array[k].string, main->setting.buffer, main->setting.names.array[k].used, main->setting.data.vocabulary.array[j]) == F_equal_to) break;
+            if (f_compare_dynamic_partial_string(main->setting.names.array[k].string, main->setting.buffer, main->setting.names.array[k].used, main->setting.data.vocabulary.array[j]) == F_equal_to) break;
           } // for
 
           if (k < main->setting.names.used) {
@@ -358,7 +358,7 @@ extern "C" {
 
         for (j = 0; j < main->setting.data.vocabulary.used; ++j) {
 
-          main->setting.state.status = fl_string_dynamic_partial_compare(name, main->setting.buffer, range, main->setting.data.vocabulary.array[j]);
+          main->setting.state.status = f_compare_dynamic_partial(name, main->setting.buffer, range, main->setting.data.vocabulary.array[j]);
 
           if (main->setting.state.status == F_equal_to) ++total;
         } // for
index 3c211e199b1660a6686c98d1bca3e056dca4fd5d..a70aef0a8650ce59f8fa328b06aef497e536c473 100644 (file)
@@ -7,19 +7,20 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_file
 f_iki
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_iki
 fl_print
 fl_signal
-fl_string
 
 fll_error
 fll_print
index a10f98014eee4b5f2d1bf208f82ff4d8af28979a..2c569c92b8b3206c41bd6c597bac34633201146a 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion -lfl_iki -lfl_print -lfl_signal -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_iki -lf_memory -lf_pipe -lf_print -lf_signal -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion -lfl_iki -lfl_print -lfl_signal -lf_color -lf_compare -lf_console -lf_conversion -lf_file -lf_iki -lf_memory -lf_pipe -lf_print -lf_rip -lf_signal -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 7c3bcfe18a97d10c464d6c18a8b1936065b9ee79..5bddd486cf38c24d78de5d3ece55abf5eb0abb1f 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/iki.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/iki.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index 39be9d482bdf58c53c748135ce4ff1f53be876a2..baccdf2f5db9e241ad74c5dff1ff40637d7da769 100644 (file)
@@ -13,11 +13,11 @@ f_file
 f_iki
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_iki
 fl_print
-fl_string
 
 fll_iki
 fll_error
index b8cb89255f972a52519c65cfd517e739335f1c90..fa1bc1dd54d5c35986f42d99428364f41d953a2e 100644 (file)
@@ -17,7 +17,7 @@ build_indexer ar
 build_indexer_arguments rcs
 build_language c
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_iki -lfll_print -lfll_program -lfl_iki -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_iki -lf_memory -lf_pipe -lf_print -lf_signal -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_iki -lfll_print -lfll_program -lfl_iki -lfl_print -lf_color -lf_console -lf_conversion -lf_file -lf_iki -lf_memory -lf_pipe -lf_print -lf_rip -lf_signal -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 8282eea00276a69889cdf329712049ae9e23f1ad..310e1a739b21e3a15a673a23c5503daff2651697 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
-#include <fll/level_0/conversion.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
+#include <fll/level_0/conversion.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 #include <fll/level_0/status_string.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index de97c2f6ced180e9d381c177749dcff1fda99921..80c88327d82b0482f45debd8b8f6d7ed5548c2dd 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
-#include <fll/level_0/conversion.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
+#include <fll/level_0/conversion.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 #include <fll/level_0/status_string.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 
 // FLL-2 includes.
 #include <fll/level_2/error.h>
index cba01e08aae9cf45f4807ebd3f59a27402766234..92785d8c75d39fe70af0d0e97786645992b5bc2e 100644 (file)
@@ -10,20 +10,22 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_file
+f_parse
 f_path
 f_pipe
 f_print
+f_rip
 f_signal
 f_status_string
 
 fl_conversion
 fl_directory
 fl_print
-fl_string
 
 fll_error
 fll_print
index 19e27111555f796356a9f7c4f4372ededf37b38e..c352f86f7c2e8c6828108ca389242c40cfd5f425 100644 (file)
@@ -10,14 +10,17 @@ f_type_array
 f_string
 f_utf
 f_color
+f_compare
 f_console
 f_conversion
 f_directory
 f_file
 f_fss
+f_parse
 f_path
 f_pipe
 f_print
+f_rip
 f_signal
 f_status_string
 
@@ -25,7 +28,6 @@ fl_conversion
 fl_directory
 fl_fss
 fl_print
-fl_string
 
 fll_error
 fll_fss_status_string
index d201d645972f995b0eaabe235e34700ced8ad005..0196f1a06e143349ee9e7efd858b7aa77c9b4d75 100644 (file)
@@ -21,7 +21,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_directory -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_file -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_directory -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_file -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index f3c03b75dfe0377eb82446eb8ee6f1de9a987448..4c8935d3337450de30104acf810aa1a2e5296c38 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lstatus_code
-build_libraries-individual -lfll_error -lfll_fss_status_string -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_file -lf_fss -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_fss_status_string -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_directory -lfl_fss -lfl_print -lf_color -lf_compare -lf_console -lf_conversion -lf_directory -lf_file -lf_fss -lf_memory -lf_parse -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 9f2682f954811a4c43b087a2726124cb3e601ef0..68e49c3c34f5a9403de48c60af9d3f599a02ead6 100644 (file)
@@ -22,7 +22,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc -lstatus_code
-build_libraries-individual -lfll_error -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_directory -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_directory -lf_file -lf_memory -lf_path -lf_pipe -lf_print -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_print -lfll_program -lfll_status_string -lfl_conversion -lfl_directory -lfl_print -lf_color -lf_console -lf_conversion -lf_directory -lf_file -lf_memory -lf_path -lf_pipe -lf_print -lf_rip -lf_signal -lf_status_string -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll
 
index 8822c843f6c283f83f45cfad2ee2cfc533704f8e..3cb0fd17c56c453a4e114c28630947f87a45caaa 100644 (file)
 #include <fll/level_0/string.h>
 #include <fll/level_0/utf.h>
 #include <fll/level_0/color.h>
+#include <fll/level_0/compare.h>
 #include <fll/level_0/console.h>
 #include <fll/level_0/conversion.h>
 #include <fll/level_0/file.h>
 #include <fll/level_0/path.h>
 #include <fll/level_0/pipe.h>
 #include <fll/level_0/print.h>
+#include <fll/level_0/rip.h>
 #include <fll/level_0/signal.h>
 
 // FLL-1 includes.
 #include <fll/level_1/conversion.h>
 #include <fll/level_1/print.h>
-#include <fll/level_1/string.h>
 #include <fll/level_1/utf.h>
 
 // FLL-2 includes.
index 6e53394d6e2428c9491a65f6133735730077224c..5f243cba86f329132767da5fc26501f464fa5efc 100644 (file)
@@ -10,13 +10,14 @@ f_color
 f_console
 f_conversion
 f_file
+f_parse
 f_pipe
 f_print
+f_rip
 f_signal
 
 fl_conversion
 fl_print
-fl_string
 
 fll_error
 fll_print
index 87672db0e15129bdfd3125620607705f7004a036..710372a94d4d253c12902de89994cf722aebdf20 100644 (file)
@@ -18,7 +18,7 @@ build_indexer_arguments rcs
 build_language c
 
 build_libraries -lc
-build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion -lfl_print -lfl_string -lf_color -lf_console -lf_conversion -lf_file -lf_memory -lf_pipe -lf_print -lf_signal -lf_string -lf_type_array -lf_utf
+build_libraries-individual -lfll_error -lfll_print -lfll_program -lfl_conversion -lfl_print -lf_color -lf_console -lf_conversion -lf_file -lf_memory -lf_pipe -lf_print -lf_rip -lf_signal -lf_string -lf_type_array -lf_utf
 build_libraries-level -lfll_2 -lfll_1 -lfll_0
 build_libraries-monolithic -lfll