]> Kevux Git Server - fll/commitdiff
Update: Add man pages forr most or all FLL functions and programs.
authorKevin Day <Kevin@kevux.org>
Sun, 14 Dec 2025 16:34:56 +0000 (10:34 -0600)
committerKevin Day <Kevin@kevux.org>
Sun, 14 Dec 2025 17:29:56 +0000 (11:29 -0600)
The man page format is terrible.

The doxygen program helps automatically create these, but it is terrible at generating the man page format (on top of the man page format itself being terrible).
I found a tool from https://github.com/gsauthof/doxy2man.git that helps convert doxygen created xml files into man pages.
It works a lot better than doxygen's man page generation.

The generation from doxygen still has problems.
It doesn't understand some of the commenting structure.

This documents the process so that I do not have to try and figure this out all over again.

I have to take the generated man pages and modify them to clean up a bunch of mess.
This is a lot of work and so I am expecting to have missed something, overlooked something, or made some silly mistake.
Oh well. I can address such problems over time.

This is another reminder (like commit 63be746d22d66870ae89f9575c82db7d0b784e32 from the 0.6 branch) that I probably have to write something that provides a better documentation format.
Then I can convert that to man pages.
I imagine something using FSS + Wiki + IKI.
Using both Wiki and IKI is because IKI isn't meant to replace Wiki.

1893 files changed:
build/doxygen/doxyfile.notes [new file with mode: 0644]
build/doxygen/fll.doxyfile [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_delete.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_destroy.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_map_delete.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_map_destroy.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_maps_delete_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_maps_destroy_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_mapss_delete_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruse_mapss_destroy_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruses_delete_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstruses_destroy_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstrusess_delete_callback.3 [new file with mode: 0644]
level_0/f_abstruse/data/documentation/man/man3/f_abstrusess_destroy_callback.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_by_id.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_by_name.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_delete.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_destroy.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_group_id_by_name.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_group_name_by_id.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_id_by_name.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_account_name_by_id.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_accounts_delete_callback.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_accounts_destroy_callback.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_accountss_delete_callback.3 [new file with mode: 0644]
level_0/f_account/data/documentation/man/man3/f_accountss_destroy_callback.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_ambient_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_ambient_reset.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_ambient_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_clear.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_clear_flag.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_compare.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_copy.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_copy_external.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_copy_internal.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_delete.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_file_descriptor_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_file_descriptor_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_file_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_file_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_flag_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_flag_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_from_name.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_from_text.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_groups_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_initialize.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_mode_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_mode_get_name.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_mode_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_owner_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_owner_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_process_bound_drop.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_process_bound_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_process_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_process_get_by_id.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_process_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_security_bits_get.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_security_bits_set.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_size.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_supported.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_supported_ambient.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_supported_code.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_to_name.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_to_text.3 [new file with mode: 0644]
level_0/f_capability/data/documentation/man/man3/f_capability_user_set.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_context_delete.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_context_destroy.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_load_context.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_save_1.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_save_2.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_save_3.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_save_4.3 [new file with mode: 0644]
level_0/f_color/data/documentation/man/man3/f_color_save_5.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_except.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_except_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim_dynamic.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_trim_string.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_except.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_except_trim.3 [new file with mode: 0644]
level_0/f_compare/data/documentation/man/man3/f_compare_utf_trim.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_environment_process.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_identify.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameter_prioritize_left.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameter_prioritize_right.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameter_process.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameter_reset.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameter_state_delete.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameter_state_destroy.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameters_delete.3 [new file with mode: 0644]
level_0/f_console/data/documentation/man/man3/f_console_parameters_destroy.3 [new file with mode: 0644]
level_0/f_control_group/data/documentation/man/man3/f_control_group_copy.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_binary.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_decimal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_duodecimal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_hexidecimal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_octal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_binary.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_decimal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_duodecimal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_hexidecimal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_octal.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_number_signed_print.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_number_signed_to_string.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_number_unsigned_print.3 [new file with mode: 0644]
level_0/f_conversion/data/documentation/man/man3/f_conversion_number_unsigned_to_string.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_create.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_create_at.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_empty.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_exists.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_exists_at.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_is.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_is_at.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_list.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_listing_delete.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_listing_destroy.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_listings_delete_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_listings_destroy_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_listingss_delete_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_listingss_destroy_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_open.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_open_at.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_recurse_do_delete.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_recurse_do_destroy.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_recurse_dos_delete_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_recurse_dos_destroy_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_recurse_doss_delete_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_recurse_doss_destroy_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_remove.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_remove_custom.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_statuss_delete_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_statuss_destroy_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_statusss_delete_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_statusss_destroy_callback.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_close.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_open.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_open_id.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_read.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_rewind.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_seek.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_stream_tell.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_touch.3 [new file with mode: 0644]
level_0/f_directory/data/documentation/man/man3/f_directory_touch_at.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_clear.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_exists.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_get.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_get_all.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_secure_is.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_set.3 [new file with mode: 0644]
level_0/f_environment/data/documentation/man/man3/f_environment_unset.3 [new file with mode: 0644]
level_0/f_execute/data/documentation/man/man3/f_execute_status_from_status.3 [new file with mode: 0644]
level_0/f_execute/data/documentation/man/man3/f_execute_status_to_status.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_access.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_access_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_clone.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_close.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_close_id.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_copy.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_device.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_device_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_fifo.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_fifo_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_node.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_create_node_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_descriptor.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_exists.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_exists_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_flush.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_group_read.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_is.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_is_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_is_stat.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_link.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_link_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_link_hard.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_link_hard_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_link_read.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_link_read_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_manipulate.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_determine.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_from_string.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_read.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_read_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_set.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_set_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_mode_to_mode.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_name_base.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_name_directory.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_open.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_open_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_owner_read.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_poll.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_read.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_read_block.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_read_until.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_remove.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_remove_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_rename.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_rename_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_role_change.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_role_change_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_seek.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_select.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_select_signal.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_size.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_size_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_size_by_id.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stat.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stat_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stat_by_id.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_close.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_flush.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_lock.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_lock_try.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_open.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_open_descriptor.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_read.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_read_block.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_read_until.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_reopen.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_unlock.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_write.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_write_block.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_write_range.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_stream_write_until.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_touch.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_touch_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_type.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_type_at.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_umask_get.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_umask_set.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_write.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_write_block.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_write_range.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_file_write_until.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_filess_delete_callback.3 [new file with mode: 0644]
level_0/f_file/data/documentation/man/man3/f_filess_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_apply_delimit.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_apply_delimit_range.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_count_lines.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_count_lines_range.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_fail_utf.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_fail_utf_to_false.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_is_combining.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_is_graph.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_is_space.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_is_zero_width.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_item_delete.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_item_destroy.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_items_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_items_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_itemss_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_itemss_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_named_delete.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_named_destroy.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nameds_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nameds_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_namedss_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_namedss_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nest_delete.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nest_destroy.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nests_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nests_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nestss_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_nestss_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_seek_to_eol.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_delete.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_destroy.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_quote_delete.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_quote_destroy.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_quotes_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_quotes_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_quotess_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_set_quotess_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_sets_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_sets_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_setss_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_setss_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_decode.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_decode_range.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_delete.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_destroy.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_encode.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packets_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packets_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packetss_delete_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_simple_packetss_destroy_callback.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_delimit.3 [new file with mode: 0644]
level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_space.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_content_is.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_content_partial_is.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_data_delete.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_data_destroy.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datas_append.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datas_append_all.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datas_delete_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datas_destroy_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datass_append.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datass_append_all.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datass_delete_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_datass_destroy_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_eki_delete.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_eki_destroy.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_eki_read.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_eki_write.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekis_append.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekis_append_all.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekis_delete_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekis_destroy_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_append.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_append_all.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_delete_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_destroy_callback.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_object_is.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_object_partial_is.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_read.3 [new file with mode: 0644]
level_0/f_iki/data/documentation/man/man3/f_iki_write.3 [new file with mode: 0644]
level_0/f_limit/data/documentation/man/man3/f_limit_process.3 [new file with mode: 0644]
level_0/f_limit/data/documentation/man/man3/f_limit_setss_delete_callback.3 [new file with mode: 0644]
level_0/f_limit/data/documentation/man/man3/f_limit_setss_destroy_callback.3 [new file with mode: 0644]
level_0/f_limit/data/documentation/man/man3/f_limit_valuess_delete_callback.3 [new file with mode: 0644]
level_0/f_limit/data/documentation/man/man3/f_limit_valuess_destroy_callback.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_adjust.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_adjust.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_append.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_append_all.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_decimate_by.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_decrease_by.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_increase.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_increase_by.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_array_resize.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_arrays_adjust.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_arrays_resize.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_delete.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_destroy.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_new.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_new_aligned.3 [new file with mode: 0644]
level_0/f_memory/data/documentation/man/man3/f_memory_resize.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_from_host_long.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_from_host_short.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_from_ip_address.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_from_ip_name.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_from_ip_string.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_is_ip_address.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_to_host_long.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_to_host_short.3 [new file with mode: 0644]
level_0/f_network/data/documentation/man/man3/f_network_to_ip_string.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_partial_fll_identify.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_to_utf_character.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_until_graph.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_until_graph_non.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_to_utf_character.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_to_utf_character.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_until_graph.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_until_graph_non.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_seek_to_utf_character.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_to_char.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_until_graph.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_until_graph_non.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_to_char.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_to_char.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_until_graph.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_until_graph_non.3 [new file with mode: 0644]
level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_to_char.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_change.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_change_at.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_current.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_directory_cleanup.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_is.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_is_absolute.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_is_relative.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_is_relative_current.3 [new file with mode: 0644]
level_0/f_path/data/documentation/man/man3/f_path_real.3 [new file with mode: 0644]
level_0/f_pipe/data/documentation/man/man3/f_pipe_error_exists.3 [new file with mode: 0644]
level_0/f_pipe/data/documentation/man/man3/f_pipe_input_exists.3 [new file with mode: 0644]
level_0/f_pipe/data/documentation/man/man3/f_pipe_output_exists.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_character.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_character_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_character_safely_get.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_dynamic_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_in_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_except_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_raw_terminated.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_safely_get.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_safely_terminated.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_terminated.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_character.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_character_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_in_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_except_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_raw.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_raw_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_raw_terminated.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_safely.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_safely_terminated.3 [new file with mode: 0644]
level_0/f_print/data/documentation/man/man3/f_print_to_terminated.3 [new file with mode: 0644]
level_0/f_process/data/documentation/man/man3/f_process_descriptor_clone.3 [new file with mode: 0644]
level_0/f_process/data/documentation/man/man3/f_process_descriptor_open.3 [new file with mode: 0644]
level_0/f_process/data/documentation/man/man3/f_process_descriptor_signal.3 [new file with mode: 0644]
level_0/f_process/data/documentation/man/man3/f_process_handle_from_path_at.3 [new file with mode: 0644]
level_0/f_process/data/documentation/man/man3/f_process_handle_open_at.3 [new file with mode: 0644]
level_0/f_random/data/documentation/man/man3/f_random_array_shuffle.3 [new file with mode: 0644]
level_0/f_random/data/documentation/man/man3/f_random_get.3 [new file with mode: 0644]
level_0/f_random/data/documentation/man/man3/f_random_read.3 [new file with mode: 0644]
level_0/f_random/data/documentation/man/man3/f_random_seed.3 [new file with mode: 0644]
level_0/f_random/data/documentation/man/man3/f_random_seed_set.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_dynamic.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_nulless.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_partial.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_partial_nulless.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_nulless.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_utf.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_utf_dynamic.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_utf_dynamic_nulless.3 [new file with mode: 0644]
level_0/f_rip/data/documentation/man/man3/f_rip_utf_nulless.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_affinity_get.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_affinity_set.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_attribute_get.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_attribute_set.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_nice.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_get.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_robin_interval_get.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_set.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get_max.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get_min.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_set.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_value_get.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_value_set.3 [new file with mode: 0644]
level_0/f_schedule/data/documentation/man/man3/f_schedule_yield.3 [new file with mode: 0644]
level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple.3 [new file with mode: 0644]
level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_get.3 [new file with mode: 0644]
level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_range.3 [new file with mode: 0644]
level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_select.3 [new file with mode: 0644]
level_0/f_serialize/data/documentation/man/man3/f_serialize_to_simple.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_action.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_close.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_mask.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_open.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_pause.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_queue.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_read.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_send.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_set_add.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_set_delete.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_set_empty.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_set_fill.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_set_has.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_suspend.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_wait.3 [new file with mode: 0644]
level_0/f_signal/data/documentation/man/man3/f_signal_wait_until.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_accept.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_addressss_delete_callback.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_addressss_destroy_callback.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_bind.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_connect.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_create.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_create_pair.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_disconnect.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_listen.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_name_host.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_name_peer.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_option_get.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_option_set.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_read.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_read_message.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_read_stream.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_write.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_write_message.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socket_write_stream.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socketss_delete_callback.3 [new file with mode: 0644]
level_0/f_socket/data/documentation/man/man3/f_socketss_destroy_callback.3 [new file with mode: 0644]
level_0/f_status/data/documentation/man/man3/f_statusss_delete_callback.3 [new file with mode: 0644]
level_0/f_status/data/documentation/man/man3/f_statusss_destroy_callback.3 [new file with mode: 0644]
level_0/f_status_string/data/documentation/man/man3/f_status_string_to.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_append_assure.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_append_assure_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_append_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_assure.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_assure_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_mash.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_mash_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_mish.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_mish_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_assure.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_assure_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mash.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mash_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mish.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mish_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_assure.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_assure_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_assure.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_assure_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_back.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_to.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_to_back.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_to.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_to_back.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_strip_null.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_strip_null_range.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_terminate.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamic_terminate_after.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamics_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamics_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamics_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamics_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamicss_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamicss_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamicss_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_dynamicss_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multis_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multis_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multis_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multis_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multiss_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multiss_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multiss_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_map_multiss_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_maps_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_maps_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_maps_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_maps_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mapss_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mapss_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mapss_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mapss_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mash.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mash_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mish.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_mish_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_prepend.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_prepend_assure.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_prepend_assure_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_prepend_nulless.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_seek_line.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_seek_line_back.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_seek_line_to.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_seek_line_to_back.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_seek_to.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_seek_to_back.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_triples_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_triples_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_triples_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_triples_destroy_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_tripless_append.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_tripless_append_all.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_tripless_delete_callback.3 [new file with mode: 0644]
level_0/f_string/data/documentation/man/man3/f_string_tripless_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_at_fork.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_affinity_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_affinity_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_concurrency_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_concurrency_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_default_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_default_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_detach_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_detach_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_guard_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_guard_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_inherit_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_inherit_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_parameter_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_parameter_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_policy_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_policy_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scope_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scope_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_size_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_size_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attributes_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attributes_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attributess_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_attributess_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_shared_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_shared_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributes_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributes_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributess_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributess_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_full_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fulls_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fulls_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fullss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fullss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrier_wait.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barriers_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barriers_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrierss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_barrierss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_caller.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_cancel.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_cancel_state_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_cancel_test.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_cancel_type_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_clock_get_id.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_compare.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_clock_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_clock_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_shared_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_shared_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributes_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributes_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributess_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributess_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_full_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_fulls_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_fulls_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_fullss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_fullss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_signal.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_signal_all.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_wait.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_condition_wait_timed.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_conditions_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_conditions_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_conditionss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_conditionss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_detach.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_exit.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_ids_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_ids_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_idss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_idss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_join.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_join_timed.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_join_try.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_key_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_key_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_key_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_key_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_keys_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_keys_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_keyss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_keyss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_shared_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_shared_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributes_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributes_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributess_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributess_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_full_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_fulls_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_fulls_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_fullss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_fullss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_read.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_read_timed.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_read_try.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_write.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_write_timed.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lock_write_try.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_locks_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_locks_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lockss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_lockss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_priority_ceiling_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_priority_ceiling_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_protocol_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_protocol_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_robust_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_robust_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_shared_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_shared_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_type_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_type_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributes_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributes_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributess_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributess_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_consistent.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_full_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fulls_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fulls_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fullss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fullss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock_timed.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock_try.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_priority_ceiling_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_priority_ceiling_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutex_unlock.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutexs_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutexs_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutexss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_mutexss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_name_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_name_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_once.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_parameter_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_parameter_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_priority_set.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_close.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_open.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock_timed.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock_try.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_unlock.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_value_get.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphores_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphores_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphoress_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_semaphoress_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_signal_mask.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_signal_queue.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_signal_write.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spin_create.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spin_delete.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spin_lock.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spin_lock_try.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spin_unlock.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spins_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spins_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spinss_delete_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_spinss_destroy_callback.3 [new file with mode: 0644]
level_0/f_thread/data/documentation/man/man3/f_thread_unlock.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_calendar_string.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_calendar_string_part.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_clock_get.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_clock_precision.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_clock_set.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_epoch_get.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_local_get.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_of_day_get.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_of_day_set.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_simpless_delete_callback.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_simpless_destroy_callback.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_sleep_spec.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_spec_millisecond.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_spec_nanosecond.3 [new file with mode: 0644]
level_0/f_time/data/documentation/man/man3/f_time_utc_get.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_buffer_decrement.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_buffer_increment.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_char_to_char.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_char_to_character.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic_digit.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic_numeric.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_ascii.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_combining.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_code.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_format.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_picture.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_digit.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_emoji.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_fragment.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_graph.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_numeric.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_phonetic.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_private.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_punctuation.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_subscript.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_superscript.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_symbol.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_unassigned.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_valid.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_modifier.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_other.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_zero_width.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_wide.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word_dash.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word_dash_plus.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_is_zero_width.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_from.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_string_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic_digit.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic_numeric.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_ascii.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_combining.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_control.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_control_code.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_control_format.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_control_picture.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_digit.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_emoji.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_fragment.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_graph.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_numeric.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_phonetic.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_private.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_punctuation.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_subscript.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_superscript.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_symbol.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_unassigned.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_valid.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_modifier.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_other.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_zero_width.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_wide.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_word.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_word_dash.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_word_dash_plus.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_is_zero_width.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_append_assure.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_append_assure_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_append_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_assure.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_assure_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mash.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mash_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mish.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mish_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_assure.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_assure_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mash.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mash_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mish.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mish_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_assure.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_assure_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_assure.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_assure_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_back.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_to_back.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_to_back.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_terminate.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_terminate_after.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mash.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mash_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mish.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_mish_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_assure.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_assure_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_nulless.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_back.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_to_back.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_to_back.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_append.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_append_all.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_delete_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_destroy_callback.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_unicode_from.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_unicode_string_to.3 [new file with mode: 0644]
level_0/f_utf/data/documentation/man/man3/f_utf_unicode_to.3 [new file with mode: 0644]
level_1/fl_control_group/data/documentation/man/man3/fl_control_group_apply.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_signed.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_signed_detect.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_unsigned.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_unsigned_detect.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_signed.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_signed_detect.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_unsigned.3 [new file with mode: 0644]
level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_unsigned_detect.3 [new file with mode: 0644]
level_1/fl_directory/data/documentation/man/man3/fl_directory_create.3 [new file with mode: 0644]
level_1/fl_directory/data/documentation/man/man3/fl_directory_do.3 [new file with mode: 0644]
level_1/fl_directory/data/documentation/man/man3/fl_directory_list.3 [new file with mode: 0644]
level_1/fl_directory/data/documentation/man/man3/fl_directory_path_pop.3 [new file with mode: 0644]
level_1/fl_directory/data/documentation/man/man3/fl_directory_path_push.3 [new file with mode: 0644]
level_1/fl_environment/data/documentation/man/man3/fl_environment_load_name.3 [new file with mode: 0644]
level_1/fl_environment/data/documentation/man/man3/fl_environment_load_names.3 [new file with mode: 0644]
level_1/fl_environment/data/documentation/man/man3/fl_environment_path_explode.3 [new file with mode: 0644]
level_1/fl_environment/data/documentation/man/man3/fl_environment_path_explode_reverse.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_content_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_content_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_content_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_content_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_object_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_object_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_object_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_object_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_content_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_content_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_object_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_object_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_content_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_content_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_content_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_content_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_object_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_object_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_object_read.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_object_write.3 [new file with mode: 0644]
level_1/fl_fss/data/documentation/man/man3/fl_fss_payload_header_map.3 [new file with mode: 0644]
level_1/fl_iki/data/documentation/man/man3/fl_iki_eki_read.3 [new file with mode: 0644]
level_1/fl_iki/data/documentation/man/man3/fl_iki_read.3 [new file with mode: 0644]
level_1/fl_path/data/documentation/man/man3/fl_path_canonical.3 [new file with mode: 0644]
level_1/fl_path/data/documentation/man/man3/fl_path_clean.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_format.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_format_convert.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_string_va.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_raw.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_raw_safely.3 [new file with mode: 0644]
level_1/fl_print/data/documentation/man/man3/fl_print_trim_safely.3 [new file with mode: 0644]
level_1/fl_status_string/data/documentation/man/man3/fl_status_string_from.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read_block.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read_until.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_block.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_range.3 [new file with mode: 0644]
level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_until.3 [new file with mode: 0644]
level_2/fll_control_group/data/documentation/man/man3/fll_control_group_prepare.3 [new file with mode: 0644]
level_2/fll_error/data/documentation/man/man3/fll_error_file_print.3 [new file with mode: 0644]
level_2/fll_error/data/documentation/man/man3/fll_error_parameter_integer_print.3 [new file with mode: 0644]
level_2/fll_error/data/documentation/man/man3/fll_error_print.3 [new file with mode: 0644]
level_2/fll_error/data/documentation/man/man3/fll_error_print_debug.3 [new file with mode: 0644]
level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add.3 [new file with mode: 0644]
level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_parameter.3 [new file with mode: 0644]
level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_parameter_set.3 [new file with mode: 0644]
level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_set.3 [new file with mode: 0644]
level_2/fll_execute/data/documentation/man/man3/fll_execute_into.3 [new file with mode: 0644]
level_2/fll_execute/data/documentation/man/man3/fll_execute_program.3 [new file with mode: 0644]
level_2/fll_file/data/documentation/man/man3/fll_file_mode_set_all.3 [new file with mode: 0644]
level_2/fll_file/data/documentation/man/man3/fll_file_role_change_all.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_list_read.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_list_write.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_read.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_write.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_embedded_list_read.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_embedded_list_write.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_list_read.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_list_write.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_read.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_write.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_identify.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_payload_read.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_payload_write.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_apart.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_apart.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_mash.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_mash_apart.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_together.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_mash.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_mash_apart.3 [new file with mode: 0644]
level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_together.3 [new file with mode: 0644]
level_2/fll_fss_status_string/data/documentation/man/man3/fll_fss_status_string_from.3 [new file with mode: 0644]
level_2/fll_fss_status_string/data/documentation/man/man3/fll_fss_status_string_to.3 [new file with mode: 0644]
level_2/fll_iki/data/documentation/man/man3/fll_iki_content_escape.3 [new file with mode: 0644]
level_2/fll_iki/data/documentation/man/man3/fll_iki_content_partial_escape.3 [new file with mode: 0644]
level_2/fll_iki/data/documentation/man/man3/fll_iki_content_partial_unescape.3 [new file with mode: 0644]
level_2/fll_iki/data/documentation/man/man3/fll_iki_content_unescape.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_character.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_character_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_in_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_except_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_format.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_format_convert.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_raw_terminated.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_safely_terminated.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_string_va.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_terminated.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_raw.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_raw_safely.3 [new file with mode: 0644]
level_2/fll_print/data/documentation/man/man3/fll_print_trim_safely.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_data_delete.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_data_destroy.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_append.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_mash.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_rip.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_rip_mash.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_context.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_context_standard.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_empty.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_verbosity.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_verbosity_standard.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_copyright.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_file_code_invalid.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_file_read.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_missing_file.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_missing_variable_not_zero.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_both_specified_same_amount.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_both_specified_same_amount_without.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_pipe.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_without.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_xor.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_empty_value.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_first_greater_than_last.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_less_than.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_more_than.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not_negative.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not_positive.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_missing_value.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_missing_value_requires_amount.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_must_specify_once.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_must_specify_once_value.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_process.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_range_start_before_stop.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_support_not.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_too_few.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_too_many.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_value_too_long.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_invalid_form_feed.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_missing_content.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_object_without_content.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_header.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_operations.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_long.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_other.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_short.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_standard.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_special_options.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_help_usage.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_signal_received.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_print_version.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_signal_check_loop.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_signal_check_simple.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_standard_set_down.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_standard_set_up.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_handle.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_received.3 [new file with mode: 0644]
level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_received_wait.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man1/byte_dump.1
level_3/byte_dump/data/documentation/man/man3/byte_dump_main.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_main_delete.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_character_fragment.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_file.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_file_none.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_parameter_range_out.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_file_header.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_message_help.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_print_text.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_process_file.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_setting_delete.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_setting_load.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_signal_handler.3 [new file with mode: 0644]
level_3/byte_dump/data/documentation/man/man3/byte_dump_thread_signal.3 [new file with mode: 0644]
level_3/example/data/documentation/man/man1/example.1
level_3/fake/data/documentation/man/man1/fake.1
level_3/fake/data/documentation/man/man3/fake_build_arguments_standard_add.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_copy.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_data_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_execute_process_script.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_get_file_name_without_extension.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_library_script.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_library_shared.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_library_static.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_library_static_object.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_load_environment.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_load_setting.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_load_setting_override.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_load_setting_process.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_load_stage.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_object.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_object_script.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_objects_add.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_operate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_path_source_string.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_shared.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_static.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_static_object.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_shared.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_static.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_static_library.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_shared.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_static.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_static_object.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_error_exist_not_directory.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_error_missing_required_setting.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_error_mode_invalid.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_error_setting_too_long.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_error_setting_value_too_long.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_message_copying.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_message_skeleton_build_base.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_verbose_create_directory.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_verbose_linked_file.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_warning_parameters_contradict.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_boolean_may_only_be.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_both_cannot_when_language.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_required_default_to.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_slash_not_allowed.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_version_may_only_be.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_program_script.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_program_shared.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_program_static.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_setting_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_skeleton.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_sources_add.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_sources_object_add.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_stage_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_build_touch.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_clean_operate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_clean_remove_recursively_verbosely.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_data_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_do_copy_action.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_do_copy_handle.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_execute.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_file_buffer.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_iki_data_reset.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_main.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_main_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_assure_inside_project.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_data_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_get_id.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_get_id_mode.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_build.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_compiler.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_define_and_parameter.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_environment.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_fail.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_indexer.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_parameter.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_stage.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_load_parameters.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_block_postprocess.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_block_prepare.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_expand.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_expand_build.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_expand_context.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_expand_environment.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_buffer_escape.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_execute.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_return.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_run.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_break.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_build.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_clean.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_compile.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_condition.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_copy.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_define.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_deletes.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_exit.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_fail.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_groups.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_define.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_exist.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_greater_if_lesser.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_group.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_is.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_mode.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_owner.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_parameter.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_index.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_link.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_modes.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_move.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_operate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_owners.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_parameter.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_pop.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_print.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_skeleton.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_to.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_top.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_touch.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_write.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_section.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_define_name.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_break.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_build.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_clean_top_skeleton.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_clone.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_compile.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_condition.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_copy.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_define.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_else.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_exit.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_fail.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_index.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_link.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_move.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_operate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_parameter.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_permission.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_pop.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_run.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_to.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_touch.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_write.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_path_relative.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_may_only.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_must_not.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_no_preceding.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_argument_invalid_section.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_compiler_not_specified.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_content_not_directory.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_define_invalid_character.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_define_name_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_fakefile_section_missing.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_file_name_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_file_type.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_indexer_not_specified.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_incomplete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_recursion.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_section_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_out_of_range_number.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_pop_last_path.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_program_failed.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_program_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_reserved_parameter_name.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_target_file_name_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_unsupported_number.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_error_unsupported_type.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_message_now_making.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_message_processing_section.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_break.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_copy.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_define.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_exiting_as.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_file_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_program.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_failure_state.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_mode.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_path.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_role.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_symbolic_link.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_touch.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_cannot_change_back.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_environment_name_already_added.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_environment_name_invalid.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_fakefile_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_file_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_invalid.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_multiple.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_object_multiple.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_make_setting_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_path_generate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_path_generate_string_dynamic.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_pipe_buffer.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_common_simple.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_common_simple_variable.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_common_wrapped_variable.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_common_wrapped_variables.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_important_simple.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_important_simple_variable.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_simple.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_simple_variable.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_number.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameter.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameter_value.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameters.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_variable.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_variables.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_debug_build_directory_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_argument_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file_full.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file_partial.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_directory_create_parent_missing.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_execute_program_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_failure_operation.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_failure_script.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_fallback.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_file.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_file_create_parent_missing.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_file_simple.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_fss.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_fss_message.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_group_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_mode_invalid.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_number_too_large.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_failed.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_argument_unknown.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_point_exists.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_target_exists_not.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_path_outside.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_path_stack_max.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_stack_max.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_operation_unknown.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_parameter_directory_not_found_path.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_parameter_not_empty.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_parameter_not_word.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_parameter_operation_not_with.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_parameter_too_many.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_requires_more_arguments.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_too_many_arguments.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_error_user_not_found.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_message_building.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_message_delete_all_files.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_message_generating_skeleton.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_message_help.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_operation_all_complete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_operation_cancelled.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_cloning.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_copying.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_create_directory.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_create_file.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_directory_exists.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists_as_link.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists_not_regular_or_link.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_file_pre_populated.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_verbose_moving.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_warning_build_directory_not_directory.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_print_warning_path_exists_not_directory.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_setting_delete.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_setting_load.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_setting_load_parameter_callback.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_signal_handler.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_signal_handler_callback.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_skeleton_operate.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_skeleton_operate_directory_create.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_skeleton_operate_file_create.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_skeleton_path_source_length.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_skeleton_path_source_string.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_string_dynamic_reset.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_string_dynamics_reset.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_string_dynamics_reset_to.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_thread_signal.3 [new file with mode: 0644]
level_3/fake/data/documentation/man/man3/fake_validate_parameter_paths.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man1/fss_identify.1
level_3/fss_identify/data/documentation/man/man3/fss_identify_load_line.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_main.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_main_delete.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_data_id.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_data_total.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_file.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_no_from.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_parameter_file_name_empty.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_parameter_file_name_invalid.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_print_message_help.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_process.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_process_name_compare.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_setting_delete.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_setting_load.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_signal_handler.3 [new file with mode: 0644]
level_3/fss_identify/data/documentation/man/man3/fss_identify_thread_signal.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man1/fss_basic_list_read.1
level_3/fss_read/data/documentation/man/man1/fss_basic_read.1
level_3/fss_read/data/documentation/man/man1/fss_embedded_list_read.1
level_3/fss_read/data/documentation/man/man1/fss_extended_list_read.1
level_3/fss_read/data/documentation/man/man1/fss_extended_read.1
level_3/fss_read/data/documentation/man/man1/fss_payload_read.1
level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_print_object_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_process_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_process_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_print_object_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_process_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_basic_process_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_cache_delete.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_delimit_content_is.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_delimit_object_is.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_depth_delete.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_depths_resize.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_object_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_set_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth_nest_recurse.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth_save.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_ensure_quotes_length.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_object_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_set_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_process_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_process_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_content_next.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_object_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_content.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_file_identify.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_files_resize.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_main.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_main_delete.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_main_print_error_format_unknown.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_main_print_error_parameter_as_changed.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_main_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_content.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_error_parameter_value_payload.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help_payload.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help_special.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_object_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_problem_payload_missing.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_set.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_payload_setting_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_at.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_content.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_content_empty.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_content_ignore.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_file.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_fss_end_early.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_fss_read.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_one_content_only.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_requires_message.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_value_before_value_number.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_value_once_only_number.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_error_unsupported_eol.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_note.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_note_header.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_pipe.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_number.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_object.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_object_end_content.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_object_end_empty.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_quote.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_set_end.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_print_set_end_no_eol.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_at.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_at_line.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_columns.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_last_line.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_name.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_total.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_process_total_multiple.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_setting_delete.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_setting_load.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_setting_load_depth.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_signal_handler.3 [new file with mode: 0644]
level_3/fss_read/data/documentation/man/man3/fss_read_thread_signal.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man1/fss_basic_list_write.1
level_3/fss_write/data/documentation/man/man1/fss_basic_write.1
level_3/fss_write/data/documentation/man/man1/fss_embedded_list_write.1
level_3/fss_write/data/documentation/man/man1/fss_extended_list_write.1
level_3/fss_write/data/documentation/man/man1/fss_extended_write.1
level_3/fss_write/data/documentation/man/man1/fss_payload_write.1
level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_content.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_object.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_content.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_object.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_content.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_object.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_content.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_object.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_content.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_object.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_main.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_main_delete.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_main_print_error_format_unknown.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_main_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_payload_print_error_payload_not_last.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_payload_print_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_pipe.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_set.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_payload_setting_load.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_error.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_error_file.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_error_one_content_only.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_error_parameter_same_times_at_least.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_error_prepend_only_whitespace.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_error_unsupported_eol.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help_end_next.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help_pipe.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_process_normal.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_process_normal_data.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_process_pipe.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_process_set.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_setting_delete.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_setting_load.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_signal_handler.3 [new file with mode: 0644]
level_3/fss_write/data/documentation/man/man3/fss_write_thread_signal.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man1/iki_read.1
level_3/iki_read/data/documentation/man/man3/iki_read_cache_delete.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_delete_data.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_identify_alteration.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_print_data.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_print_message_help.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_at.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges_prepare.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges_whole.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_total.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_eki_setting_load.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_identify_substitution.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_delete_data.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_identify_alteration.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_print_data.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_print_message_help.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_at.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges_prepare.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges_whole.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_total.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_iki_setting_load.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_main.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_main_delete.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_data_line.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_data_total.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_data_total_expand.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_data_wrap_append.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_data_wrap_prepend.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_error.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_error_file.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_message_help.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_print_message_help_note.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_process_buffer.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_process_buffer_at_newline.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_process_line.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_process_wrap_append.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_process_wrap_prepend.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_setting_delete.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_setting_load.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_setting_load_parameter_substitution.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_signal_handler.3 [new file with mode: 0644]
level_3/iki_read/data/documentation/man/man3/iki_read_thread_signal.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man1/iki_write.1
level_3/iki_write/data/documentation/man/man3/iki_write_cache_delete.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_eki_load_objects_content_pipe.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_error_objects_not_valid.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_message_help.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_message_help_note_pipe.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_eki_process_objects_content.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_eki_setting_load.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_iki_load_objects_content_pipe.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_error_object_not_valid.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_message_help.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_message_help_note_pipe.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_iki_process_objects_content.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_iki_setting_load.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_main.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_main_delete.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_print_eki_error_objects_match_content.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_print_error.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_print_error_file.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_print_error_main_missing.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_print_message_help.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_print_message_help_note.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_setting_delete.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_setting_load.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_signal_handler.3 [new file with mode: 0644]
level_3/iki_write/data/documentation/man/man3/iki_write_thread_signal.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man1/fss_status_code.1
level_3/status_code/data/documentation/man/man1/status_code.1
level_3/status_code/data/documentation/man/man3/status_code_convert_number.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_fss_print_help_detail.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_main.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_main_delete.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_data_code.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_data_context_value.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_error.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_error_cannot_error_warning_number.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_error_invalid_callback.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_error_no_status_codes.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_message_help.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_print_message_help_detail.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_process_check.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_process_normal.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_process_number.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_setting_delete.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_setting_load.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_signal_handler.3 [new file with mode: 0644]
level_3/status_code/data/documentation/man/man3/status_code_thread_signal.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man1/utf8.1
level_3/utf8/data/documentation/man/man3/utf8_convert_bytesequence.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_convert_codepoint.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_convert_raw.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_detect_codepoint.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_main.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_main_delete.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_bytesequence.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_character_invalid.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_codepoint.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_combining_or_width.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_combining_or_width_invalid.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_bytesequence.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_codepoint.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_combining_or_width.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_file.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_parameter.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_pipe.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_data_width.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_decode.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_encode.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_file.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_no_from.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_name_empty.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_not_found.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_to_too_many.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_print_message_help.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_process_file_bytesequence.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_process_file_codepoint.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_process_text.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_process_text_width.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_setting_delete.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_setting_load.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_signal_handler.3 [new file with mode: 0644]
level_3/utf8/data/documentation/man/man3/utf8_thread_signal.3 [new file with mode: 0644]

diff --git a/build/doxygen/doxyfile.notes b/build/doxygen/doxyfile.notes
new file mode 100644 (file)
index 0000000..a7cb071
--- /dev/null
@@ -0,0 +1,23 @@
+Short guide on how the fll.doxyfile is used.
+
+Build the monolithic files and programs:
+  bash build/scripts/bootstrap-example.sh monolithic
+  bash build/scripts/bootstrap-example.sh programs-monolithic
+
+Create a new directory and copy all of the files there:
+  mkdir -vp generate_docs
+  cp -vR fll/includes/ generate_docs/
+  cp -v build/doxygen/fll.doxyfile generate_docs/
+
+Build the xml documentation:
+  cd generate_docs
+  doxygen fll.doxyfile
+
+Use doxy2man (from https://github.com/gsauthof/doxy2man.git) to create the man pages:
+  for i in *.xml ; do echo ; echo $i ; doxy2man $i || break ; done
+
+Manually edit all of the files in out/*.3 and move them to their correct projects.
+Delete any generated files that are not needed or make no sense.
+For example, the *.h.3 files make little sense.
+
+The .1 man pages for programs are manually created.
diff --git a/build/doxygen/fll.doxyfile b/build/doxygen/fll.doxyfile
new file mode 100644 (file)
index 0000000..8e1d1bf
--- /dev/null
@@ -0,0 +1,2899 @@
+# Doxyfile 1.14.0
+
+# This file describes the settings to be used by the documentation system
+# Doxygen (www.doxygen.org) for a project.
+#
+# All text after a double hash (##) is considered a comment and is placed in
+# front of the TAG it is preceding.
+#
+# All text after a single hash (#) is considered a comment and will be ignored.
+# The format is:
+# TAG = value [value, ...]
+# For lists, items can also be appended using:
+# TAG += value [value, ...]
+# Values that contain spaces should be placed between quotes (\" \").
+#
+# Note:
+#
+# Use Doxygen to compare the used configuration file with the template
+# configuration file:
+# doxygen -x [configFile]
+# Use Doxygen to compare the used configuration file with the template
+# configuration file without replacing the environment variables or CMake type
+# replacement variables:
+# doxygen -x_noenv [configFile]
+
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+
+# This tag specifies the encoding used for all characters in the configuration
+# file that follow. The default is UTF-8 which is also the encoding used for all
+# text before the first occurrence of this tag. Doxygen uses libiconv (or the
+# iconv built into libc) for the transcoding. See
+# https://www.gnu.org/software/libiconv/ for the list of possible encodings.
+# The default value is: UTF-8.
+
+DOXYFILE_ENCODING      = UTF-8
+
+# The PROJECT_NAME tag is a single word (or a sequence of words surrounded by
+# double-quotes, unless you are using Doxywizard) that should identify the
+# project for which the documentation is generated. This name is used in the
+# title of most generated pages and in a few other places.
+# The default value is: My Project.
+
+PROJECT_NAME           = FLL
+
+# The PROJECT_NUMBER tag can be used to enter a project or revision number. This
+# could be handy for archiving the generated documentation or if some version
+# control system is used.
+
+PROJECT_NUMBER         = 0.8.0
+
+# Using the PROJECT_BRIEF tag one can provide an optional one line description
+# for a project that appears at the top of each page and should give viewers a
+# quick idea about the purpose of the project. Keep the description short.
+
+PROJECT_BRIEF          =
+
+# With the PROJECT_LOGO tag one can specify a logo or an icon that is included
+# in the documentation. The maximum height of the logo should not exceed 55
+# pixels and the maximum width should not exceed 200 pixels. Doxygen will copy
+# the logo to the output directory.
+
+PROJECT_LOGO           =
+
+# With the PROJECT_ICON tag one can specify an icon that is included in the tabs
+# when the HTML document is shown. Doxygen will copy the logo to the output
+# directory.
+
+PROJECT_ICON           =
+
+# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute) path
+# into which the generated documentation will be written. If a relative path is
+# entered, it will be relative to the location where Doxygen was started. If
+# left blank the current directory will be used.
+
+OUTPUT_DIRECTORY       = generated
+
+# If the CREATE_SUBDIRS tag is set to YES then Doxygen will create up to 4096
+# sub-directories (in 2 levels) under the output directory of each output format
+# and will distribute the generated files over these directories. Enabling this
+# option can be useful when feeding Doxygen a huge amount of source files, where
+# putting all generated files in the same directory would otherwise cause
+# performance problems for the file system. Adapt CREATE_SUBDIRS_LEVEL to
+# control the number of sub-directories.
+# The default value is: NO.
+
+CREATE_SUBDIRS         = NO
+
+# Controls the number of sub-directories that will be created when
+# CREATE_SUBDIRS tag is set to YES. Level 0 represents 16 directories, and every
+# level increment doubles the number of directories, resulting in 4096
+# directories at level 8 which is the default and also the maximum value. The
+# sub-directories are organized in 2 levels, the first level always has a fixed
+# number of 16 directories.
+# Minimum value: 0, maximum value: 8, default value: 8.
+# This tag requires that the tag CREATE_SUBDIRS is set to YES.
+
+CREATE_SUBDIRS_LEVEL   = 8
+
+# If the ALLOW_UNICODE_NAMES tag is set to YES, Doxygen will allow non-ASCII
+# characters to appear in the names of generated files. If set to NO, non-ASCII
+# characters will be escaped, for example _xE3_x81_x84 will be used for Unicode
+# U+3044.
+# The default value is: NO.
+
+ALLOW_UNICODE_NAMES    = NO
+
+# The OUTPUT_LANGUAGE tag is used to specify the language in which all
+# documentation generated by Doxygen is written. Doxygen will use this
+# information to generate all constant output in the proper language.
+# Possible values are: Afrikaans, Arabic, Armenian, Brazilian, Bulgarian,
+# Catalan, Chinese, Chinese-Traditional, Croatian, Czech, Danish, Dutch, English
+# (United States), Esperanto, Farsi (Persian), Finnish, French, German, Greek,
+# Hindi, Hungarian, Indonesian, Italian, Japanese, Japanese-en (Japanese with
+# English messages), Korean, Korean-en (Korean with English messages), Latvian,
+# Lithuanian, Macedonian, Norwegian, Persian (Farsi), Polish, Portuguese,
+# Romanian, Russian, Serbian, Serbian-Cyrillic, Slovak, Slovene, Spanish,
+# Swedish, Turkish, Ukrainian and Vietnamese.
+# The default value is: English.
+
+OUTPUT_LANGUAGE        = English
+
+# If the BRIEF_MEMBER_DESC tag is set to YES, Doxygen will include brief member
+# descriptions after the members that are listed in the file and class
+# documentation (similar to Javadoc). Set to NO to disable this.
+# The default value is: YES.
+
+BRIEF_MEMBER_DESC      = YES
+
+# If the REPEAT_BRIEF tag is set to YES, Doxygen will prepend the brief
+# description of a member or function before the detailed description
+#
+# Note: If both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
+# brief descriptions will be completely suppressed.
+# The default value is: YES.
+
+REPEAT_BRIEF           = YES
+
+# This tag implements a quasi-intelligent brief description abbreviator that is
+# used to form the text in various listings. Each string in this list, if found
+# as the leading text of the brief description, will be stripped from the text
+# and the result, after processing the whole list, is used as the annotated
+# text. Otherwise, the brief description is used as-is. If left blank, the
+# following values are used ($name is automatically replaced with the name of
+# the entity):The $name class, The $name widget, The $name file, is, provides,
+# specifies, contains, represents, a, an and the.
+
+ABBREVIATE_BRIEF       = "The $name class" \
+                         "The $name widget" \
+                         "The $name file" \
+                         is \
+                         provides \
+                         specifies \
+                         contains \
+                         represents \
+                         a \
+                         an \
+                         the
+
+# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
+# Doxygen will generate a detailed section even if there is only a brief
+# description.
+# The default value is: NO.
+
+ALWAYS_DETAILED_SEC    = NO
+
+# If the INLINE_INHERITED_MEMB tag is set to YES, Doxygen will show all
+# inherited members of a class in the documentation of that class as if those
+# members were ordinary class members. Constructors, destructors and assignment
+# operators of the base classes will not be shown.
+# The default value is: NO.
+
+INLINE_INHERITED_MEMB  = NO
+
+# If the FULL_PATH_NAMES tag is set to YES, Doxygen will prepend the full path
+# before files name in the file list and in the header files. If set to NO the
+# shortest path that makes the file name unique will be used
+# The default value is: YES.
+
+FULL_PATH_NAMES        = YES
+
+# The STRIP_FROM_PATH tag can be used to strip a user-defined part of the path.
+# Stripping is only done if one of the specified strings matches the left-hand
+# part of the path. The tag can be used to show relative paths in the file list.
+# If left blank the directory from which Doxygen is run is used as the path to
+# strip.
+#
+# Note that you can specify absolute paths here, but also relative paths, which
+# will be relative from the directory where Doxygen is started.
+# This tag requires that the tag FULL_PATH_NAMES is set to YES.
+
+STRIP_FROM_PATH        =
+
+# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of the
+# path mentioned in the documentation of a class, which tells the reader which
+# header file to include in order to use a class. If left blank only the name of
+# the header file containing the class definition is used. Otherwise one should
+# specify the list of include paths that are normally passed to the compiler
+# using the -I flag.
+
+STRIP_FROM_INC_PATH    =
+
+# If the SHORT_NAMES tag is set to YES, Doxygen will generate much shorter (but
+# less readable) file names. This can be useful if your file system doesn't
+# support long names like on DOS, Mac, or CD-ROM.
+# The default value is: NO.
+
+SHORT_NAMES            = NO
+
+# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen will interpret the
+# first line (until the first dot, question mark or exclamation mark) of a
+# Javadoc-style comment as the brief description. If set to NO, the Javadoc-
+# style will behave just like regular Qt-style comments (thus requiring an
+# explicit @brief command for a brief description.)
+# The default value is: NO.
+
+JAVADOC_AUTOBRIEF      = NO
+
+# If the JAVADOC_BANNER tag is set to YES then Doxygen will interpret a line
+# such as
+# /***************
+# as being the beginning of a Javadoc-style comment "banner". If set to NO, the
+# Javadoc-style will behave just like regular comments and it will not be
+# interpreted by Doxygen.
+# The default value is: NO.
+
+JAVADOC_BANNER         = NO
+
+# If the QT_AUTOBRIEF tag is set to YES then Doxygen will interpret the first
+# line (until the first dot, question mark or exclamation mark) of a Qt-style
+# comment as the brief description. If set to NO, the Qt-style will behave just
+# like regular Qt-style comments (thus requiring an explicit \brief command for
+# a brief description.)
+# The default value is: NO.
+
+QT_AUTOBRIEF           = NO
+
+# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen treat a
+# multi-line C++ special comment block (i.e. a block of //! or /// comments) as
+# a brief description. This used to be the default behavior. The new default is
+# to treat a multi-line C++ comment block as a detailed description. Set this
+# tag to YES if you prefer the old behavior instead.
+#
+# Note that setting this tag to YES also means that rational rose comments are
+# not recognized any more.
+# The default value is: NO.
+
+MULTILINE_CPP_IS_BRIEF = NO
+
+# By default Python docstrings are displayed as preformatted text and Doxygen's
+# special commands cannot be used. By setting PYTHON_DOCSTRING to NO the
+# Doxygen's special commands can be used and the contents of the docstring
+# documentation blocks is shown as Doxygen documentation.
+# The default value is: YES.
+
+PYTHON_DOCSTRING       = YES
+
+# If the INHERIT_DOCS tag is set to YES then an undocumented member inherits the
+# documentation from any documented member that it re-implements.
+# The default value is: YES.
+
+INHERIT_DOCS           = NO
+
+# If the SEPARATE_MEMBER_PAGES tag is set to YES then Doxygen will produce a new
+# page for each member. If set to NO, the documentation of a member will be part
+# of the file/class/namespace that contains it.
+# The default value is: NO.
+
+SEPARATE_MEMBER_PAGES  = NO
+
+# The TAB_SIZE tag can be used to set the number of spaces in a tab. Doxygen
+# uses this value to replace tabs by spaces in code fragments.
+# Minimum value: 1, maximum value: 16, default value: 4.
+
+TAB_SIZE               = 2
+
+# This tag can be used to specify a number of aliases that act as commands in
+# the documentation. An alias has the form:
+# name=value
+# For example adding
+# "sideeffect=@par Side Effects:^^"
+# will allow you to put the command \sideeffect (or @sideeffect) in the
+# documentation, which will result in a user-defined paragraph with heading
+# "Side Effects:". Note that you cannot put \n's in the value part of an alias
+# to insert newlines (in the resulting output). You can put ^^ in the value part
+# of an alias to insert a newline as if a physical newline was in the original
+# file. When you need a literal { or } or , in the value part of an alias you
+# have to escape them by means of a backslash (\), this can lead to conflicts
+# with the commands \{ and \} for these it is advised to use the version @{ and
+# @} or use a double escape (\\{ and \\})
+
+ALIASES                =
+
+# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C sources
+# only. Doxygen will then generate output that is more tailored for C. For
+# instance, some of the names that are used will be different. The list of all
+# members will be omitted, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_FOR_C  = YES
+
+# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java or
+# Python sources only. Doxygen will then generate output that is more tailored
+# for that language. For instance, namespaces will be presented as packages,
+# qualified scopes will look different, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_JAVA   = NO
+
+# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
+# sources. Doxygen will then generate output that is tailored for Fortran.
+# The default value is: NO.
+
+OPTIMIZE_FOR_FORTRAN   = NO
+
+# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
+# sources. Doxygen will then generate output that is tailored for VHDL.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_VHDL   = NO
+
+# Set the OPTIMIZE_OUTPUT_SLICE tag to YES if your project consists of Slice
+# sources only. Doxygen will then generate output that is more tailored for that
+# language. For instance, namespaces will be presented as modules, types will be
+# separated into more groups, etc.
+# The default value is: NO.
+
+OPTIMIZE_OUTPUT_SLICE  = NO
+
+# Doxygen selects the parser to use depending on the extension of the files it
+# parses. With this tag you can assign which parser to use for a given
+# extension. Doxygen has a built-in mapping, but you can override or extend it
+# using this tag. The format is ext=language, where ext is a file extension, and
+# language is one of the parsers supported by Doxygen: IDL, Java, JavaScript,
+# Csharp (C#), C, C++, Lex, D, PHP, md (Markdown), Objective-C, Python, Slice,
+# VHDL, Fortran (fixed format Fortran: FortranFixed, free formatted Fortran:
+# FortranFree, unknown formatted Fortran: Fortran. In the later case the parser
+# tries to guess whether the code is fixed or free formatted code, this is the
+# default for Fortran type files). For instance to make Doxygen treat .inc files
+# as Fortran files (default is PHP), and .f files as C (default is Fortran),
+# use: inc=Fortran f=C.
+#
+# Note: For files without extension you can use no_extension as a placeholder.
+#
+# Note that for custom extensions you also need to set FILE_PATTERNS otherwise
+# the files are not read by Doxygen. When specifying no_extension you should add
+# * to the FILE_PATTERNS.
+#
+# Note see also the list of default file extension mappings.
+
+EXTENSION_MAPPING      =
+
+# If the MARKDOWN_SUPPORT tag is enabled then Doxygen pre-processes all comments
+# according to the Markdown format, which allows for more readable
+# documentation. See https://daringfireball.net/projects/markdown/ for details.
+# The output of markdown processing is further processed by Doxygen, so you can
+# mix Doxygen, HTML, and XML commands with Markdown formatting. Disable only in
+# case of backward compatibilities issues.
+# The default value is: YES.
+
+MARKDOWN_SUPPORT       = YES
+
+# When the TOC_INCLUDE_HEADINGS tag is set to a non-zero value, all headings up
+# to that level are automatically included in the table of contents, even if
+# they do not have an id attribute.
+# Note: This feature currently applies only to Markdown headings.
+# Minimum value: 0, maximum value: 99, default value: 6.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+TOC_INCLUDE_HEADINGS   = 0
+
+# The MARKDOWN_ID_STYLE tag can be used to specify the algorithm used to
+# generate identifiers for the Markdown headings. Note: Every identifier is
+# unique.
+# Possible values are: DOXYGEN use a fixed 'autotoc_md' string followed by a
+# sequence number starting at 0 and GITHUB use the lower case version of title
+# with any whitespace replaced by '-' and punctuation characters removed.
+# The default value is: DOXYGEN.
+# This tag requires that the tag MARKDOWN_SUPPORT is set to YES.
+
+MARKDOWN_ID_STYLE      = DOXYGEN
+
+# When enabled Doxygen tries to link words that correspond to documented
+# classes, or namespaces to their corresponding documentation. Such a link can
+# be prevented in individual cases by putting a % sign in front of the word or
+# globally by setting AUTOLINK_SUPPORT to NO. Words listed in the
+# AUTOLINK_IGNORE_WORDS tag are excluded from automatic linking.
+# The default value is: YES.
+
+AUTOLINK_SUPPORT       = YES
+
+# This tag specifies a list of words that, when matching the start of a word in
+# the documentation, will suppress auto links generation, if it is enabled via
+# AUTOLINK_SUPPORT. This list does not affect links explicitly created using \#
+# or the \link or commands.
+# This tag requires that the tag AUTOLINK_SUPPORT is set to YES.
+
+AUTOLINK_IGNORE_WORDS  =
+
+# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
+# to include (a tag file for) the STL sources as input, then you should set this
+# tag to YES in order to let Doxygen match functions declarations and
+# definitions whose arguments contain STL classes (e.g. func(std::string);
+# versus func(std::string) {}). This also makes the inheritance and
+# collaboration diagrams that involve STL classes more complete and accurate.
+# The default value is: NO.
+
+BUILTIN_STL_SUPPORT    = NO
+
+# If you use Microsoft's C++/CLI language, you should set this option to YES to
+# enable parsing support.
+# The default value is: NO.
+
+CPP_CLI_SUPPORT        = NO
+
+# Set the SIP_SUPPORT tag to YES if your project consists of sip (see:
+# https://www.riverbankcomputing.com/software) sources only. Doxygen will parse
+# them like normal C++ but will assume all classes use public instead of private
+# inheritance when no explicit protection keyword is present.
+# The default value is: NO.
+
+SIP_SUPPORT            = NO
+
+# For Microsoft's IDL there are propget and propput attributes to indicate
+# getter and setter methods for a property. Setting this option to YES will make
+# Doxygen to replace the get and set methods by a property in the documentation.
+# This will only work if the methods are indeed getting or setting a simple
+# type. If this is not the case, or you want to show the methods anyway, you
+# should set this option to NO.
+# The default value is: YES.
+
+IDL_PROPERTY_SUPPORT   = YES
+
+# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
+# tag is set to YES then Doxygen will reuse the documentation of the first
+# member in the group (if any) for the other members of the group. By default
+# all members of a group must be documented explicitly.
+# The default value is: NO.
+
+DISTRIBUTE_GROUP_DOC   = NO
+
+# If one adds a struct or class to a group and this option is enabled, then also
+# any nested class or struct is added to the same group. By default this option
+# is disabled and one has to add nested compounds explicitly via \ingroup.
+# The default value is: NO.
+
+GROUP_NESTED_COMPOUNDS = NO
+
+# Set the SUBGROUPING tag to YES to allow class member groups of the same type
+# (for instance a group of public functions) to be put as a subgroup of that
+# type (e.g. under the Public Functions section). Set it to NO to prevent
+# subgrouping. Alternatively, this can be done per class using the
+# \nosubgrouping command.
+# The default value is: YES.
+
+SUBGROUPING            = YES
+
+# When the INLINE_GROUPED_CLASSES tag is set to YES, classes, structs and unions
+# are shown inside the group in which they are included (e.g. using \ingroup)
+# instead of on a separate page (for HTML and Man pages) or section (for LaTeX
+# and RTF).
+#
+# Note that this feature does not work in combination with
+# SEPARATE_MEMBER_PAGES.
+# The default value is: NO.
+
+INLINE_GROUPED_CLASSES = NO
+
+# When the INLINE_SIMPLE_STRUCTS tag is set to YES, structs, classes, and unions
+# with only public data fields or simple typedef fields will be shown inline in
+# the documentation of the scope in which they are defined (i.e. file,
+# namespace, or group documentation), provided this scope is documented. If set
+# to NO, structs, classes, and unions are shown on a separate page (for HTML and
+# Man pages) or section (for LaTeX and RTF).
+# The default value is: NO.
+
+INLINE_SIMPLE_STRUCTS  = NO
+
+# When TYPEDEF_HIDES_STRUCT tag is enabled, a typedef of a struct, union, or
+# enum is documented as struct, union, or enum with the name of the typedef. So
+# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
+# with name TypeT. When disabled the typedef will appear as a member of a file,
+# namespace, or class. And the struct will be named TypeS. This can typically be
+# useful for C code in case the coding convention dictates that all compound
+# types are typedef'ed and only the typedef is referenced, never the tag name.
+# The default value is: NO.
+
+TYPEDEF_HIDES_STRUCT   = NO
+
+# The size of the symbol lookup cache can be set using LOOKUP_CACHE_SIZE. This
+# cache is used to resolve symbols given their name and scope. Since this can be
+# an expensive process and often the same symbol appears multiple times in the
+# code, Doxygen keeps a cache of pre-resolved symbols. If the cache is too small
+# Doxygen will become slower. If the cache is too large, memory is wasted. The
+# cache size is given by this formula: 2^(16+LOOKUP_CACHE_SIZE). The valid range
+# is 0..9, the default is 0, corresponding to a cache size of 2^16=65536
+# symbols. At the end of a run Doxygen will report the cache usage and suggest
+# the optimal cache size from a speed point of view.
+# Minimum value: 0, maximum value: 9, default value: 0.
+
+LOOKUP_CACHE_SIZE      = 0
+
+# The NUM_PROC_THREADS specifies the number of threads Doxygen is allowed to use
+# during processing. When set to 0 Doxygen will based this on the number of
+# cores available in the system. You can set it explicitly to a value larger
+# than 0 to get more control over the balance between CPU load and processing
+# speed. At this moment only the input processing can be done using multiple
+# threads. Since this is still an experimental feature the default is set to 1,
+# which effectively disables parallel processing. Please report any issues you
+# encounter. Generating dot graphs in parallel is controlled by the
+# DOT_NUM_THREADS setting.
+# Minimum value: 0, maximum value: 32, default value: 1.
+
+NUM_PROC_THREADS       = 1
+
+# If the TIMESTAMP tag is set different from NO then each generated page will
+# contain the date or date and time when the page was generated. Setting this to
+# NO can help when comparing the output of multiple runs.
+# Possible values are: YES, NO, DATETIME and DATE.
+# The default value is: NO.
+
+TIMESTAMP              = NO
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+
+# If the EXTRACT_ALL tag is set to YES, Doxygen will assume all entities in
+# documentation are documented, even if no documentation was available. Private
+# class members and static file members will be hidden unless the
+# EXTRACT_PRIVATE respectively EXTRACT_STATIC tags are set to YES.
+# Note: This will also disable the warnings about undocumented members that are
+# normally produced when WARNINGS is set to YES.
+# The default value is: NO.
+
+EXTRACT_ALL            = YES
+
+# If the EXTRACT_PRIVATE tag is set to YES, all private members of a class will
+# be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIVATE        = NO
+
+# If the EXTRACT_PRIV_VIRTUAL tag is set to YES, documented private virtual
+# methods of a class will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PRIV_VIRTUAL   = NO
+
+# If the EXTRACT_PACKAGE tag is set to YES, all members with package or internal
+# scope will be included in the documentation.
+# The default value is: NO.
+
+EXTRACT_PACKAGE        = NO
+
+# If the EXTRACT_STATIC tag is set to YES, all static members of a file will be
+# included in the documentation.
+# The default value is: NO.
+
+EXTRACT_STATIC         = NO
+
+# If the EXTRACT_LOCAL_CLASSES tag is set to YES, classes (and structs) defined
+# locally in source files will be included in the documentation. If set to NO,
+# only classes defined in header files are included. Does not have any effect
+# for Java sources.
+# The default value is: YES.
+
+EXTRACT_LOCAL_CLASSES  = YES
+
+# This flag is only useful for Objective-C code. If set to YES, local methods,
+# which are defined in the implementation section but not in the interface are
+# included in the documentation. If set to NO, only methods in the interface are
+# included.
+# The default value is: NO.
+
+EXTRACT_LOCAL_METHODS  = NO
+
+# If this flag is set to YES, the members of anonymous namespaces will be
+# extracted and appear in the documentation as a namespace called
+# 'anonymous_namespace{file}', where file will be replaced with the base name of
+# the file that contains the anonymous namespace. By default anonymous namespace
+# are hidden.
+# The default value is: NO.
+
+EXTRACT_ANON_NSPACES   = NO
+
+# If this flag is set to YES, the name of an unnamed parameter in a declaration
+# will be determined by the corresponding definition. By default unnamed
+# parameters remain unnamed in the output.
+# The default value is: YES.
+
+RESOLVE_UNNAMED_PARAMS = YES
+
+# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
+# undocumented members inside documented classes or files. If set to NO these
+# members will be included in the various overviews, but no documentation
+# section is generated. This option has no effect if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_MEMBERS     = NO
+
+# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
+# undocumented classes that are normally visible in the class hierarchy. If set
+# to NO, these classes will be included in the various overviews. This option
+# will also hide undocumented C++ concepts if enabled. This option has no effect
+# if EXTRACT_ALL is enabled.
+# The default value is: NO.
+
+HIDE_UNDOC_CLASSES     = NO
+
+# If the HIDE_UNDOC_NAMESPACES tag is set to YES, Doxygen will hide all
+# undocumented namespaces that are normally visible in the namespace hierarchy.
+# If set to NO, these namespaces will be included in the various overviews. This
+# option has no effect if EXTRACT_ALL is enabled.
+# The default value is: YES.
+
+HIDE_UNDOC_NAMESPACES  = YES
+
+# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all friend
+# declarations. If set to NO, these declarations will be included in the
+# documentation.
+# The default value is: NO.
+
+HIDE_FRIEND_COMPOUNDS  = NO
+
+# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
+# documentation blocks found inside the body of a function. If set to NO, these
+# blocks will be appended to the function's detailed documentation block.
+# The default value is: NO.
+
+HIDE_IN_BODY_DOCS      = NO
+
+# The INTERNAL_DOCS tag determines if documentation that is typed after a
+# \internal command is included. If the tag is set to NO then the documentation
+# will be excluded. Set it to YES to include the internal documentation.
+# The default value is: NO.
+
+INTERNAL_DOCS          = NO
+
+# With the correct setting of option CASE_SENSE_NAMES Doxygen will better be
+# able to match the capabilities of the underlying filesystem. In case the
+# filesystem is case sensitive (i.e. it supports files in the same directory
+# whose names only differ in casing), the option must be set to YES to properly
+# deal with such files in case they appear in the input. For filesystems that
+# are not case sensitive the option should be set to NO to properly deal with
+# output files written for symbols that only differ in casing, such as for two
+# classes, one named CLASS and the other named Class, and to also support
+# references to files without having to specify the exact matching casing. On
+# Windows (including Cygwin) and macOS, users should typically set this option
+# to NO, whereas on Linux or other Unix flavors it should typically be set to
+# YES.
+# Possible values are: SYSTEM, NO and YES.
+# The default value is: SYSTEM.
+
+CASE_SENSE_NAMES       = YES
+
+# If the HIDE_SCOPE_NAMES tag is set to NO then Doxygen will show members with
+# their full class and namespace scopes in the documentation. If set to YES, the
+# scope will be hidden.
+# The default value is: NO.
+
+HIDE_SCOPE_NAMES       = NO
+
+# If the HIDE_COMPOUND_REFERENCE tag is set to NO (default) then Doxygen will
+# append additional text to a page's title, such as Class Reference. If set to
+# YES the compound reference will be hidden.
+# The default value is: NO.
+
+HIDE_COMPOUND_REFERENCE= NO
+
+# If the SHOW_HEADERFILE tag is set to YES then the documentation for a class
+# will show which file needs to be included to use the class.
+# The default value is: YES.
+
+SHOW_HEADERFILE        = YES
+
+# If the SHOW_INCLUDE_FILES tag is set to YES then Doxygen will put a list of
+# the files that are included by a file in the documentation of that file.
+# The default value is: YES.
+
+SHOW_INCLUDE_FILES     = YES
+
+# If the SHOW_GROUPED_MEMB_INC tag is set to YES then Doxygen will add for each
+# grouped member an include statement to the documentation, telling the reader
+# which file to include in order to use the member.
+# The default value is: NO.
+
+SHOW_GROUPED_MEMB_INC  = NO
+
+# If the FORCE_LOCAL_INCLUDES tag is set to YES then Doxygen will list include
+# files with double quotes in the documentation rather than with sharp brackets.
+# The default value is: NO.
+
+FORCE_LOCAL_INCLUDES   = NO
+
+# If the INLINE_INFO tag is set to YES then a tag [inline] is inserted in the
+# documentation for inline members.
+# The default value is: YES.
+
+INLINE_INFO            = YES
+
+# If the SORT_MEMBER_DOCS tag is set to YES then Doxygen will sort the
+# (detailed) documentation of file and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order.
+# The default value is: YES.
+
+SORT_MEMBER_DOCS       = YES
+
+# If the SORT_BRIEF_DOCS tag is set to YES then Doxygen will sort the brief
+# descriptions of file, namespace and class members alphabetically by member
+# name. If set to NO, the members will appear in declaration order. Note that
+# this will also influence the order of the classes in the class list.
+# The default value is: NO.
+
+SORT_BRIEF_DOCS        = NO
+
+# If the SORT_MEMBERS_CTORS_1ST tag is set to YES then Doxygen will sort the
+# (brief and detailed) documentation of class members so that constructors and
+# destructors are listed first. If set to NO the constructors will appear in the
+# respective orders defined by SORT_BRIEF_DOCS and SORT_MEMBER_DOCS.
+# Note: If SORT_BRIEF_DOCS is set to NO this option is ignored for sorting brief
+# member documentation.
+# Note: If SORT_MEMBER_DOCS is set to NO this option is ignored for sorting
+# detailed member documentation.
+# The default value is: NO.
+
+SORT_MEMBERS_CTORS_1ST = NO
+
+# If the SORT_GROUP_NAMES tag is set to YES then Doxygen will sort the hierarchy
+# of group names into alphabetical order. If set to NO the group names will
+# appear in their defined order.
+# The default value is: NO.
+
+SORT_GROUP_NAMES       = NO
+
+# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be sorted by
+# fully-qualified names, including namespaces. If set to NO, the class list will
+# be sorted only by class name, not including the namespace part.
+# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
+# Note: This option applies only to the class list, not to the alphabetical
+# list.
+# The default value is: NO.
+
+SORT_BY_SCOPE_NAME     = NO
+
+# If the STRICT_PROTO_MATCHING option is enabled and Doxygen fails to do proper
+# type resolution of all parameters of a function it will reject a match between
+# the prototype and the implementation of a member function even if there is
+# only one candidate or it is obvious which candidate to choose by doing a
+# simple string match. By disabling STRICT_PROTO_MATCHING Doxygen will still
+# accept a match between prototype and implementation in such cases.
+# The default value is: NO.
+
+STRICT_PROTO_MATCHING  = NO
+
+# The GENERATE_TODOLIST tag can be used to enable (YES) or disable (NO) the todo
+# list. This list is created by putting \todo commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TODOLIST      = NO
+
+# The GENERATE_TESTLIST tag can be used to enable (YES) or disable (NO) the test
+# list. This list is created by putting \test commands in the documentation.
+# The default value is: YES.
+
+GENERATE_TESTLIST      = NO
+
+# The GENERATE_BUGLIST tag can be used to enable (YES) or disable (NO) the bug
+# list. This list is created by putting \bug commands in the documentation.
+# The default value is: YES.
+
+GENERATE_BUGLIST       = NO
+
+# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or disable (NO)
+# the deprecated list. This list is created by putting \deprecated commands in
+# the documentation.
+# The default value is: YES.
+
+GENERATE_DEPRECATEDLIST= NO
+
+# The ENABLED_SECTIONS tag can be used to enable conditional documentation
+# sections, marked by \if <section_label> ... \endif and \cond <section_label>
+# ... \endcond blocks.
+
+ENABLED_SECTIONS       =
+
+# The MAX_INITIALIZER_LINES tag determines the maximum number of lines that the
+# initial value of a variable or macro / define can have for it to appear in the
+# documentation. If the initializer consists of more lines than specified here
+# it will be hidden. Use a value of 0 to hide initializers completely. The
+# appearance of the value of individual variables and macros / defines can be
+# controlled using \showinitializer or \hideinitializer command in the
+# documentation regardless of this setting.
+# Minimum value: 0, maximum value: 10000, default value: 30.
+
+MAX_INITIALIZER_LINES  = 50
+
+# Set the SHOW_USED_FILES tag to NO to disable the list of files generated at
+# the bottom of the documentation of classes and structs. If set to YES, the
+# list will mention the files that were used to generate the documentation.
+# The default value is: YES.
+
+SHOW_USED_FILES        = YES
+
+# Set the SHOW_FILES tag to NO to disable the generation of the Files page. This
+# will remove the Files entry from the Quick Index and from the Folder Tree View
+# (if specified).
+# The default value is: YES.
+
+SHOW_FILES             = YES
+
+# Set the SHOW_NAMESPACES tag to NO to disable the generation of the Namespaces
+# page. This will remove the Namespaces entry from the Quick Index and from the
+# Folder Tree View (if specified).
+# The default value is: YES.
+
+SHOW_NAMESPACES        = YES
+
+# The FILE_VERSION_FILTER tag can be used to specify a program or script that
+# Doxygen should invoke to get the current version for each file (typically from
+# the version control system). Doxygen will invoke the program by executing (via
+# popen()) the command command input-file, where command is the value of the
+# FILE_VERSION_FILTER tag, and input-file is the name of an input file provided
+# by Doxygen. Whatever the program writes to standard output is used as the file
+# version. For an example see the documentation.
+
+FILE_VERSION_FILTER    =
+
+# The LAYOUT_FILE tag can be used to specify a layout file which will be parsed
+# by Doxygen. The layout file controls the global structure of the generated
+# output files in an output format independent way. To create the layout file
+# that represents Doxygen's defaults, run Doxygen with the -l option. You can
+# optionally specify a file name after the option, if omitted DoxygenLayout.xml
+# will be used as the name of the layout file. See also section "Changing the
+# layout of pages" for information.
+#
+# Note that if you run Doxygen from a directory containing a file called
+# DoxygenLayout.xml, Doxygen will parse it automatically even if the LAYOUT_FILE
+# tag is left empty.
+
+LAYOUT_FILE            =
+
+# The CITE_BIB_FILES tag can be used to specify one or more bib files containing
+# the reference definitions. This must be a list of .bib files. The .bib
+# extension is automatically appended if omitted. This requires the bibtex tool
+# to be installed. See also https://en.wikipedia.org/wiki/BibTeX for more info.
+# For LaTeX the style of the bibliography can be controlled using
+# LATEX_BIB_STYLE. To use this feature you need bibtex and perl available in the
+# search path. See also \cite for info how to create references.
+
+CITE_BIB_FILES         =
+
+# The EXTERNAL_TOOL_PATH tag can be used to extend the search path (PATH
+# environment variable) so that external tools such as latex and gs can be
+# found.
+# Note: Directories specified with EXTERNAL_TOOL_PATH are added in front of the
+# path already specified by the PATH variable, and are added in the order
+# specified.
+# Note: This option is particularly useful for macOS version 14 (Sonoma) and
+# higher, when running Doxygen from Doxywizard, because in this case any user-
+# defined changes to the PATH are ignored. A typical example on macOS is to set
+# EXTERNAL_TOOL_PATH = /Library/TeX/texbin /usr/local/bin
+# together with the standard path, the full search path used by doxygen when
+# launching external tools will then become
+# PATH=/Library/TeX/texbin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
+
+EXTERNAL_TOOL_PATH     =
+
+#---------------------------------------------------------------------------
+# Configuration options related to warning and progress messages
+#---------------------------------------------------------------------------
+
+# The QUIET tag can be used to turn on/off the messages that are generated to
+# standard output by Doxygen. If QUIET is set to YES this implies that the
+# messages are off.
+# The default value is: NO.
+
+QUIET                  = NO
+
+# The WARNINGS tag can be used to turn on/off the warning messages that are
+# generated to standard error (stderr) by Doxygen. If WARNINGS is set to YES
+# this implies that the warnings are on.
+#
+# Tip: Turn warnings on while writing the documentation.
+# The default value is: YES.
+
+WARNINGS               = YES
+
+# If the WARN_IF_UNDOCUMENTED tag is set to YES then Doxygen will generate
+# warnings for undocumented members. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: YES.
+
+WARN_IF_UNDOCUMENTED   = YES
+
+# If the WARN_IF_DOC_ERROR tag is set to YES, Doxygen will generate warnings for
+# potential errors in the documentation, such as documenting some parameters in
+# a documented function twice, or documenting parameters that don't exist or
+# using markup commands wrongly.
+# The default value is: YES.
+
+WARN_IF_DOC_ERROR      = YES
+
+# If WARN_IF_INCOMPLETE_DOC is set to YES, Doxygen will warn about incomplete
+# function parameter documentation. If set to NO, Doxygen will accept that some
+# parameters have no documentation without warning.
+# The default value is: YES.
+
+WARN_IF_INCOMPLETE_DOC = YES
+
+# This WARN_NO_PARAMDOC option can be enabled to get warnings for functions that
+# are documented, but have no documentation for their parameters or return
+# value. If set to NO, Doxygen will only warn about wrong parameter
+# documentation, but not about the absence of documentation. If EXTRACT_ALL is
+# set to YES then this flag will automatically be disabled. See also
+# WARN_IF_INCOMPLETE_DOC
+# The default value is: NO.
+
+WARN_NO_PARAMDOC       = NO
+
+# If WARN_IF_UNDOC_ENUM_VAL option is set to YES, Doxygen will warn about
+# undocumented enumeration values. If set to NO, Doxygen will accept
+# undocumented enumeration values. If EXTRACT_ALL is set to YES then this flag
+# will automatically be disabled.
+# The default value is: NO.
+
+WARN_IF_UNDOC_ENUM_VAL = NO
+
+# If WARN_LAYOUT_FILE option is set to YES, Doxygen will warn about issues found
+# while parsing the user defined layout file, such as missing or wrong elements.
+# See also LAYOUT_FILE for details. If set to NO, problems with the layout file
+# will be suppressed.
+# The default value is: YES.
+
+WARN_LAYOUT_FILE       = YES
+
+# If the WARN_AS_ERROR tag is set to YES then Doxygen will immediately stop when
+# a warning is encountered. If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS
+# then Doxygen will continue running as if WARN_AS_ERROR tag is set to NO, but
+# at the end of the Doxygen process Doxygen will return with a non-zero status.
+# If the WARN_AS_ERROR tag is set to FAIL_ON_WARNINGS_PRINT then Doxygen behaves
+# like FAIL_ON_WARNINGS but in case no WARN_LOGFILE is defined Doxygen will not
+# write the warning messages in between other messages but write them at the end
+# of a run, in case a WARN_LOGFILE is defined the warning messages will be
+# besides being in the defined file also be shown at the end of a run, unless
+# the WARN_LOGFILE is defined as - i.e. standard output (stdout) in that case
+# the behavior will remain as with the setting FAIL_ON_WARNINGS.
+# Possible values are: NO, YES, FAIL_ON_WARNINGS and FAIL_ON_WARNINGS_PRINT.
+# The default value is: NO.
+
+WARN_AS_ERROR          = NO
+
+# The WARN_FORMAT tag determines the format of the warning messages that Doxygen
+# can produce. The string should contain the $file, $line, and $text tags, which
+# will be replaced by the file and line number from which the warning originated
+# and the warning text. Optionally the format may contain $version, which will
+# be replaced by the version of the file (if it could be obtained via
+# FILE_VERSION_FILTER)
+# See also: WARN_LINE_FORMAT
+# The default value is: $file:$line: $text.
+
+WARN_FORMAT            = "$file:$line: $text"
+
+# In the $text part of the WARN_FORMAT command it is possible that a reference
+# to a more specific place is given. To make it easier to jump to this place
+# (outside of Doxygen) the user can define a custom "cut" / "paste" string.
+# Example:
+# WARN_LINE_FORMAT = "'vi $file +$line'"
+# See also: WARN_FORMAT
+# The default value is: at line $line of file $file.
+
+WARN_LINE_FORMAT       = "at line $line of file $file"
+
+# The WARN_LOGFILE tag can be used to specify a file to which warning and error
+# messages should be written. If left blank the output is written to standard
+# error (stderr). In case the file specified cannot be opened for writing the
+# warning and error messages are written to standard error. When as file - is
+# specified the warning and error messages are written to standard output
+# (stdout).
+
+WARN_LOGFILE           =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the input files
+#---------------------------------------------------------------------------
+
+# The INPUT tag is used to specify the files and/or directories that contain
+# documented source files. You may enter file names like myfile.cpp or
+# directories like /usr/src/myproject. Separate the files or directories with
+# spaces. See also FILE_PATTERNS and EXTENSION_MAPPING
+# Note: If this tag is empty the current directory is searched.
+
+INPUT                  = includes
+
+# This tag can be used to specify the character encoding of the source files
+# that Doxygen parses. Internally Doxygen uses the UTF-8 encoding. Doxygen uses
+# libiconv (or the iconv built into libc) for the transcoding. See the libiconv
+# documentation (see:
+# https://www.gnu.org/software/libiconv/) for the list of possible encodings.
+# See also: INPUT_FILE_ENCODING
+# The default value is: UTF-8.
+
+INPUT_ENCODING         = UTF-8
+
+# This tag can be used to specify the character encoding of the source files
+# that Doxygen parses. The INPUT_FILE_ENCODING tag can be used to specify
+# character encoding on a per file pattern basis. Doxygen will compare the file
+# name with each pattern and apply the encoding instead of the default
+# INPUT_ENCODING if there is a match. The character encodings are a list of the
+# form: pattern=encoding (like *.php=ISO-8859-1).
+# See also: INPUT_ENCODING for further information on supported encodings.
+
+INPUT_FILE_ENCODING    =
+
+# If the value of the INPUT tag contains directories, you can use the
+# FILE_PATTERNS tag to specify one or more wildcard patterns (like *.cpp and
+# *.h) to filter out the source-files in the directories.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# read by Doxygen.
+#
+# Note the list of default checked file patterns might differ from the list of
+# default file extension mappings.
+#
+# If left blank the following patterns are tested:*.c, *.cc, *.cxx, *.cxxm,
+# *.cpp, *.cppm, *.ccm, *.c++, *.c++m, *.java, *.ii, *.ixx, *.ipp, *.i++, *.inl,
+# *.idl, *.ddl, *.odl, *.h, *.hh, *.hxx, *.hpp, *.h++, *.l, *.cs, *.d, *.php,
+# *.php4, *.php5, *.phtml, *.inc, *.m, *.markdown, *.md, *.mm, *.dox (to be
+# provided as Doxygen C comment), *.py, *.pyw, *.f90, *.f95, *.f03, *.f08,
+# *.f18, *.f, *.for, *.vhd, *.vhdl, *.ucf, *.qsf and *.ice.
+
+FILE_PATTERNS          = *.c \
+                         *.h
+
+# The RECURSIVE tag can be used to specify whether or not subdirectories should
+# be searched for input files as well.
+# The default value is: NO.
+
+RECURSIVE              = YES
+
+# The EXCLUDE tag can be used to specify files and/or directories that should be
+# excluded from the INPUT source files. This way you can easily exclude a
+# subdirectory from a directory tree whose root is specified with the INPUT tag.
+#
+# Note that relative paths are relative to the directory from which Doxygen is
+# run.
+
+EXCLUDE                =
+
+# The EXCLUDE_SYMLINKS tag can be used to select whether or not files or
+# directories that are symbolic links (a Unix file system feature) are excluded
+# from the input.
+# The default value is: NO.
+
+EXCLUDE_SYMLINKS       = NO
+
+# If the value of the INPUT tag contains directories, you can use the
+# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
+# certain files from those directories.
+#
+# Note that the wildcards are matched against the file with absolute path, so to
+# exclude all test directories for example use the pattern */test/*
+
+EXCLUDE_PATTERNS       =
+
+# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
+# (namespaces, classes, functions, etc.) that should be excluded from the
+# output. The symbol name can be a fully qualified name, a word, or if the
+# wildcard * is used, a substring. Examples: ANamespace, AClass,
+# ANamespace::AClass, ANamespace::*Test
+
+EXCLUDE_SYMBOLS        =
+
+# The EXAMPLE_PATH tag can be used to specify one or more files or directories
+# that contain example code fragments that are included (see the \include
+# command).
+
+EXAMPLE_PATH           =
+
+# If the value of the EXAMPLE_PATH tag contains directories, you can use the
+# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp and
+# *.h) to filter out the source-files in the directories. If left blank all
+# files are included.
+
+EXAMPLE_PATTERNS       = *
+
+# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
+# searched for input files to be used with the \include or \dontinclude commands
+# irrespective of the value of the RECURSIVE tag.
+# The default value is: NO.
+
+EXAMPLE_RECURSIVE      = NO
+
+# The IMAGE_PATH tag can be used to specify one or more files or directories
+# that contain images that are to be included in the documentation (see the
+# \image command).
+
+IMAGE_PATH             =
+
+# The INPUT_FILTER tag can be used to specify a program that Doxygen should
+# invoke to filter for each input file. Doxygen will invoke the filter program
+# by executing (via popen()) the command:
+#
+# <filter> <input-file>
+#
+# where <filter> is the value of the INPUT_FILTER tag, and <input-file> is the
+# name of an input file. Doxygen will then use the output that the filter
+# program writes to standard output. If FILTER_PATTERNS is specified, this tag
+# will be ignored.
+#
+# Note that the filter must not add or remove lines; it is applied before the
+# code is scanned, but not when the output code is generated. If lines are added
+# or removed, the anchors will not be placed correctly.
+#
+# Note that Doxygen will use the data processed and written to standard output
+# for further processing, therefore nothing else, like debug statements or used
+# commands (so in case of a Windows batch file always use @echo OFF), should be
+# written to standard output.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by Doxygen.
+
+INPUT_FILTER           =
+
+# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
+# basis. Doxygen will compare the file name with each pattern and apply the
+# filter if there is a match. The filters are a list of the form: pattern=filter
+# (like *.cpp=my_cpp_filter). See INPUT_FILTER for further information on how
+# filters are used. If the FILTER_PATTERNS tag is empty or if none of the
+# patterns match the file name, INPUT_FILTER is applied.
+#
+# Note that for custom extensions or not directly supported extensions you also
+# need to set EXTENSION_MAPPING for the extension otherwise the files are not
+# properly processed by Doxygen.
+
+FILTER_PATTERNS        =
+
+# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
+# INPUT_FILTER) will also be used to filter the input files that are used for
+# producing the source files to browse (i.e. when SOURCE_BROWSER is set to YES).
+# The default value is: NO.
+
+FILTER_SOURCE_FILES    = NO
+
+# The FILTER_SOURCE_PATTERNS tag can be used to specify source filters per file
+# pattern. A pattern will override the setting for FILTER_PATTERN (if any) and
+# it is also possible to disable source filtering for a specific pattern using
+# *.ext= (so without naming a filter).
+# This tag requires that the tag FILTER_SOURCE_FILES is set to YES.
+
+FILTER_SOURCE_PATTERNS =
+
+# If the USE_MDFILE_AS_MAINPAGE tag refers to the name of a markdown file that
+# is part of the input, its contents will be placed on the main page
+# (index.html). This can be useful if you have a project on for instance GitHub
+# and want to reuse the introduction page also for the Doxygen output.
+
+USE_MDFILE_AS_MAINPAGE =
+
+# If the IMPLICIT_DIR_DOCS tag is set to YES, any README.md file found in sub-
+# directories of the project's root, is used as the documentation for that sub-
+# directory, except when the README.md starts with a \dir, \page or \mainpage
+# command. If set to NO, the README.md file needs to start with an explicit \dir
+# command in order to be used as directory documentation.
+# The default value is: YES.
+
+IMPLICIT_DIR_DOCS      = YES
+
+# The Fortran standard specifies that for fixed formatted Fortran code all
+# characters from position 72 are to be considered as comment. A common
+# extension is to allow longer lines before the automatic comment starts. The
+# setting FORTRAN_COMMENT_AFTER will also make it possible that longer lines can
+# be processed before the automatic comment starts.
+# Minimum value: 7, maximum value: 10000, default value: 72.
+
+FORTRAN_COMMENT_AFTER  = 72
+
+#---------------------------------------------------------------------------
+# Configuration options related to source browsing
+#---------------------------------------------------------------------------
+
+# If the SOURCE_BROWSER tag is set to YES then a list of source files will be
+# generated. Documented entities will be cross-referenced with these sources.
+#
+# Note: To get rid of all source code in the generated output, make sure that
+# also VERBATIM_HEADERS is set to NO.
+# The default value is: NO.
+
+SOURCE_BROWSER         = NO
+
+# Setting the INLINE_SOURCES tag to YES will include the body of functions,
+# multi-line macros, enums or list initialized variables directly into the
+# documentation.
+# The default value is: NO.
+
+INLINE_SOURCES         = NO
+
+# Setting the STRIP_CODE_COMMENTS tag to YES will instruct Doxygen to hide any
+# special comment blocks from generated source code fragments. Normal C, C++ and
+# Fortran comments will always remain visible.
+# The default value is: YES.
+
+STRIP_CODE_COMMENTS    = NO
+
+# If the REFERENCED_BY_RELATION tag is set to YES then for each documented
+# entity all documented functions referencing it will be listed.
+# The default value is: NO.
+
+REFERENCED_BY_RELATION = NO
+
+# If the REFERENCES_RELATION tag is set to YES then for each documented function
+# all documented entities called/used by that function will be listed.
+# The default value is: NO.
+
+REFERENCES_RELATION    = NO
+
+# If the REFERENCES_LINK_SOURCE tag is set to YES and SOURCE_BROWSER tag is set
+# to YES then the hyperlinks from functions in REFERENCES_RELATION and
+# REFERENCED_BY_RELATION lists will link to the source code. Otherwise they will
+# link to the documentation.
+# The default value is: YES.
+
+REFERENCES_LINK_SOURCE = YES
+
+# If SOURCE_TOOLTIPS is enabled (the default) then hovering a hyperlink in the
+# source code will show a tooltip with additional information such as prototype,
+# brief description and links to the definition and documentation. Since this
+# will make the HTML file larger and loading of large files a bit slower, you
+# can opt to disable this feature.
+# The default value is: YES.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+SOURCE_TOOLTIPS        = YES
+
+# If the USE_HTAGS tag is set to YES then the references to source code will
+# point to the HTML generated by the htags(1) tool instead of Doxygen built-in
+# source browser. The htags tool is part of GNU's global source tagging system
+# (see https://www.gnu.org/software/global/global.html). You will need version
+# 4.8.6 or higher.
+#
+# To use it do the following:
+# - Install the latest version of global
+# - Enable SOURCE_BROWSER and USE_HTAGS in the configuration file
+# - Make sure the INPUT points to the root of the source tree
+# - Run doxygen as normal
+#
+# Doxygen will invoke htags (and that will in turn invoke gtags), so these
+# tools must be available from the command line (i.e. in the search path).
+#
+# The result: instead of the source browser generated by Doxygen, the links to
+# source code will now point to the output of htags.
+# The default value is: NO.
+# This tag requires that the tag SOURCE_BROWSER is set to YES.
+
+USE_HTAGS              = NO
+
+# If the VERBATIM_HEADERS tag is set the YES then Doxygen will generate a
+# verbatim copy of the header file for each class for which an include is
+# specified. Set to NO to disable this.
+# See also: Section \class.
+# The default value is: YES.
+
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+
+# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index of all
+# compounds will be generated. Enable this if the project contains a lot of
+# classes, structs, unions or interfaces.
+# The default value is: YES.
+
+ALPHABETICAL_INDEX     = YES
+
+# The IGNORE_PREFIX tag can be used to specify a prefix (or a list of prefixes)
+# that should be ignored while generating the index headers. The IGNORE_PREFIX
+# tag works for classes, function and member names. The entity will be placed in
+# the alphabetical list under the first letter of the entity name that remains
+# after removing the prefix.
+# This tag requires that the tag ALPHABETICAL_INDEX is set to YES.
+
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the HTML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_HTML tag is set to YES, Doxygen will generate HTML output
+# The default value is: YES.
+
+GENERATE_HTML          = NO
+
+# The HTML_OUTPUT tag is used to specify where the HTML docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_OUTPUT            = html
+
+# The HTML_FILE_EXTENSION tag can be used to specify the file extension for each
+# generated HTML page (for example: .htm, .php, .asp).
+# The default value is: .html.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FILE_EXTENSION    = .html
+
+# The HTML_HEADER tag can be used to specify a user-defined HTML header file for
+# each generated HTML page. If the tag is left blank Doxygen will generate a
+# standard header.
+#
+# To get valid HTML the header file that includes any scripts and style sheets
+# that Doxygen needs, which is dependent on the configuration options used (e.g.
+# the setting GENERATE_TREEVIEW). It is highly recommended to start with a
+# default header using
+# doxygen -w html new_header.html new_footer.html new_stylesheet.css
+# YourConfigFile
+# and then modify the file new_header.html. See also section "Doxygen usage"
+# for information on how to generate the default header that Doxygen normally
+# uses.
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of Doxygen. For a description
+# of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_HEADER            =
+
+# The HTML_FOOTER tag can be used to specify a user-defined HTML footer for each
+# generated HTML page. If the tag is left blank Doxygen will generate a standard
+# footer. See HTML_HEADER for more information on how to generate a default
+# footer and what special commands can be used inside the footer. See also
+# section "Doxygen usage" for information on how to generate the default footer
+# that Doxygen normally uses.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FOOTER            =
+
+# The HTML_STYLESHEET tag can be used to specify a user-defined cascading style
+# sheet that is used by each HTML page. It can be used to fine-tune the look of
+# the HTML output. If left blank Doxygen will generate a default style sheet.
+# See also section "Doxygen usage" for information on how to generate the style
+# sheet that Doxygen normally uses.
+# Note: It is recommended to use HTML_EXTRA_STYLESHEET instead of this tag, as
+# it is more robust and this tag (HTML_STYLESHEET) will in the future become
+# obsolete.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_STYLESHEET        =
+
+# The HTML_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# cascading style sheets that are included after the standard style sheets
+# created by Doxygen. Using this option one can overrule certain style aspects.
+# This is preferred over using HTML_STYLESHEET since it does not replace the
+# standard style sheet and is therefore more robust against future updates.
+# Doxygen will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# Note: Since the styling of scrollbars can currently not be overruled in
+# Webkit/Chromium, the styling will be left out of the default doxygen.css if
+# one or more extra stylesheets have been specified. So if scrollbar
+# customization is desired it has to be added explicitly. For an example see the
+# documentation.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_STYLESHEET  =
+
+# The HTML_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the HTML output directory. Note
+# that these files will be copied to the base HTML output directory. Use the
+# $relpath^ marker in the HTML_HEADER and/or HTML_FOOTER files to load these
+# files. In the HTML_STYLESHEET file, use the file name only. Also note that the
+# files will be copied as-is; there are no commands or markers available.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_EXTRA_FILES       =
+
+# The HTML_COLORSTYLE tag can be used to specify if the generated HTML output
+# should be rendered with a dark or light theme.
+# Possible values are: LIGHT always generates light mode output, DARK always
+# generates dark mode output, AUTO_LIGHT automatically sets the mode according
+# to the user preference, uses light mode if no preference is set (the default),
+# AUTO_DARK automatically sets the mode according to the user preference, uses
+# dark mode if no preference is set and TOGGLE allows a user to switch between
+# light and dark mode via a button.
+# The default value is: AUTO_LIGHT.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE        = AUTO_LIGHT
+
+# The HTML_COLORSTYLE_HUE tag controls the color of the HTML output. Doxygen
+# will adjust the colors in the style sheet and background images according to
+# this color. Hue is specified as an angle on a color-wheel, see
+# https://en.wikipedia.org/wiki/Hue for more information. For instance the value
+# 0 represents red, 60 is yellow, 120 is green, 180 is cyan, 240 is blue, 300
+# purple, and 360 is red again.
+# Minimum value: 0, maximum value: 359, default value: 220.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_HUE    = 220
+
+# The HTML_COLORSTYLE_SAT tag controls the purity (or saturation) of the colors
+# in the HTML output. For a value of 0 the output will use gray-scales only. A
+# value of 255 will produce the most vivid colors.
+# Minimum value: 0, maximum value: 255, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_SAT    = 100
+
+# The HTML_COLORSTYLE_GAMMA tag controls the gamma correction applied to the
+# luminance component of the colors in the HTML output. Values below 100
+# gradually make the output lighter, whereas values above 100 make the output
+# darker. The value divided by 100 is the actual gamma applied, so 80 represents
+# a gamma of 0.8, The value 220 represents a gamma of 2.2, and 100 does not
+# change the gamma.
+# Minimum value: 40, maximum value: 240, default value: 80.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COLORSTYLE_GAMMA  = 80
+
+# If the HTML_DYNAMIC_MENUS tag is set to YES then the generated HTML
+# documentation will contain a main index with vertical navigation menus that
+# are dynamically created via JavaScript. If disabled, the navigation index will
+# consists of multiple levels of tabs that are statically embedded in every HTML
+# page. Disable this option to support browsers that do not have JavaScript,
+# like the Qt help browser.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_MENUS     = YES
+
+# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
+# documentation will contain sections that can be hidden and shown after the
+# page has loaded.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_DYNAMIC_SECTIONS  = NO
+
+# If the HTML_CODE_FOLDING tag is set to YES then classes and functions can be
+# dynamically folded and expanded in the generated HTML source code.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_CODE_FOLDING      = YES
+
+# If the HTML_COPY_CLIPBOARD tag is set to YES then Doxygen will show an icon in
+# the top right corner of code and text fragments that allows the user to copy
+# its content to the clipboard. Note this only works if supported by the browser
+# and the web page is served via a secure context (see:
+# https://www.w3.org/TR/secure-contexts/), i.e. using the https: or file:
+# protocol.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_COPY_CLIPBOARD    = YES
+
+# Doxygen stores a couple of settings persistently in the browser (via e.g.
+# cookies). By default these settings apply to all HTML pages generated by
+# Doxygen across all projects. The HTML_PROJECT_COOKIE tag can be used to store
+# the settings under a project specific key, such that the user preferences will
+# be stored separately.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_PROJECT_COOKIE    =
+
+# With HTML_INDEX_NUM_ENTRIES one can control the preferred number of entries
+# shown in the various tree structured indices initially; the user can expand
+# and collapse entries dynamically later on. Doxygen will expand the tree to
+# such a level that at most the specified number of entries are visible (unless
+# a fully collapsed tree already exceeds this amount). So setting the number of
+# entries 1 will produce a full collapsed tree by default. 0 is a special value
+# representing an infinite number of entries and will result in a full expanded
+# tree by default.
+# Minimum value: 0, maximum value: 9999, default value: 100.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_INDEX_NUM_ENTRIES = 100
+
+# If the GENERATE_DOCSET tag is set to YES, additional index files will be
+# generated that can be used as input for Apple's Xcode 3 integrated development
+# environment (see:
+# https://developer.apple.com/xcode/), introduced with OSX 10.5 (Leopard). To
+# create a documentation set, Doxygen will generate a Makefile in the HTML
+# output directory. Running make will produce the docset in that directory and
+# running make install will install the docset in
+# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find it at
+# startup. See https://developer.apple.com/library/archive/featuredarticles/Doxy
+# genXcode/_index.html for more information.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_DOCSET        = NO
+
+# This tag determines the name of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# The default value is: Doxygen generated docs.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDNAME        = "Doxygen generated docs"
+
+# This tag determines the URL of the docset feed. A documentation feed provides
+# an umbrella under which multiple documentation sets from a single provider
+# (such as a company or product suite) can be grouped.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_FEEDURL         =
+
+# This tag specifies a string that should uniquely identify the documentation
+# set bundle. This should be a reverse domain-name style string, e.g.
+# com.mycompany.MyDocSet. Doxygen will append .docset to the name.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_BUNDLE_ID       = org.doxygen.Project
+
+# The DOCSET_PUBLISHER_ID tag specifies a string that should uniquely identify
+# the documentation publisher. This should be a reverse domain-name style
+# string, e.g. com.mycompany.MyDocSet.documentation.
+# The default value is: org.doxygen.Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_ID    = org.doxygen.Publisher
+
+# The DOCSET_PUBLISHER_NAME tag identifies the documentation publisher.
+# The default value is: Publisher.
+# This tag requires that the tag GENERATE_DOCSET is set to YES.
+
+DOCSET_PUBLISHER_NAME  = Publisher
+
+# If the GENERATE_HTMLHELP tag is set to YES then Doxygen generates three
+# additional HTML index files: index.hhp, index.hhc, and index.hhk. The
+# index.hhp is a project file that can be read by Microsoft's HTML Help Workshop
+# on Windows. In the beginning of 2021 Microsoft took the original page, with
+# a.o. the download links, offline (the HTML help workshop was already many
+# years in maintenance mode). You can download the HTML help workshop from the
+# web archives at Installation executable (see:
+# http://web.archive.org/web/20160201063255/http://download.microsoft.com/downlo
+# ad/0/A/9/0A939EF6-E31C-430F-A3DF-DFAE7960D564/htmlhelp.exe).
+#
+# The HTML Help Workshop contains a compiler that can convert all HTML output
+# generated by Doxygen into a single compiled HTML file (.chm). Compiled HTML
+# files are now used as the Windows 98 help format, and will replace the old
+# Windows help format (.hlp) on all Windows platforms in the future. Compressed
+# HTML files also contain an index, a table of contents, and you can search for
+# words in the documentation. The HTML workshop also contains a viewer for
+# compressed HTML files.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_HTMLHELP      = NO
+
+# The CHM_FILE tag can be used to specify the file name of the resulting .chm
+# file. You can add a path in front of the file if the result should not be
+# written to the html output directory.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_FILE               =
+
+# The HHC_LOCATION tag can be used to specify the location (absolute path
+# including file name) of the HTML help compiler (hhc.exe). If non-empty,
+# Doxygen will try to run the HTML help compiler on the generated index.hhp.
+# The file has to be specified with full path.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+HHC_LOCATION           =
+
+# The GENERATE_CHI flag controls if a separate .chi index file is generated
+# (YES) or that it should be included in the main .chm file (NO).
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+GENERATE_CHI           = NO
+
+# The CHM_INDEX_ENCODING is used to encode HtmlHelp index (hhk), content (hhc)
+# and project file content.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+CHM_INDEX_ENCODING     =
+
+# The BINARY_TOC flag controls whether a binary table of contents is generated
+# (YES) or a normal table of contents (NO) in the .chm file. Furthermore it
+# enables the Previous and Next buttons.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+BINARY_TOC             = NO
+
+# The TOC_EXPAND flag can be set to YES to add extra items for group members to
+# the table of contents of the HTML help documentation and to the tree view.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTMLHELP is set to YES.
+
+TOC_EXPAND             = NO
+
+# The SITEMAP_URL tag is used to specify the full URL of the place where the
+# generated documentation will be placed on the server by the user during the
+# deployment of the documentation. The generated sitemap is called sitemap.xml
+# and placed on the directory specified by HTML_OUTPUT. In case no SITEMAP_URL
+# is specified no sitemap is generated. For information about the sitemap
+# protocol see https://www.sitemaps.org
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SITEMAP_URL            =
+
+# If the GENERATE_QHP tag is set to YES and both QHP_NAMESPACE and
+# QHP_VIRTUAL_FOLDER are set, an additional index file will be generated that
+# can be used as input for Qt's qhelpgenerator to generate a Qt Compressed Help
+# (.qch) of the generated HTML documentation.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_QHP           = NO
+
+# If the QHG_LOCATION tag is specified, the QCH_FILE tag can be used to specify
+# the file name of the resulting .qch file. The path specified is relative to
+# the HTML output folder.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QCH_FILE               =
+
+# The QHP_NAMESPACE tag specifies the namespace to use when generating Qt Help
+# Project output. For more information please see Qt Help Project / Namespace
+# (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#namespace).
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_NAMESPACE          = org.doxygen.Project
+
+# The QHP_VIRTUAL_FOLDER tag specifies the namespace to use when generating Qt
+# Help Project output. For more information please see Qt Help Project / Virtual
+# Folders (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#virtual-folders).
+# The default value is: doc.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_VIRTUAL_FOLDER     = doc
+
+# If the QHP_CUST_FILTER_NAME tag is set, it specifies the name of a custom
+# filter to add. For more information please see Qt Help Project / Custom
+# Filters (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_NAME   =
+
+# The QHP_CUST_FILTER_ATTRS tag specifies the list of the attributes of the
+# custom filter to add. For more information please see Qt Help Project / Custom
+# Filters (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#custom-filters).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_CUST_FILTER_ATTRS  =
+
+# The QHP_SECT_FILTER_ATTRS tag specifies the list of the attributes this
+# project's filter section matches. Qt Help Project / Filter Attributes (see:
+# https://doc.qt.io/archives/qt-4.8/qthelpproject.html#filter-attributes).
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHP_SECT_FILTER_ATTRS  =
+
+# The QHG_LOCATION tag can be used to specify the location (absolute path
+# including file name) of Qt's qhelpgenerator. If non-empty Doxygen will try to
+# run qhelpgenerator on the generated .qhp file.
+# This tag requires that the tag GENERATE_QHP is set to YES.
+
+QHG_LOCATION           =
+
+# If the GENERATE_ECLIPSEHELP tag is set to YES, additional index files will be
+# generated, together with the HTML files, they form an Eclipse help plugin. To
+# install this plugin and make it available under the help contents menu in
+# Eclipse, the contents of the directory containing the HTML and XML files needs
+# to be copied into the plugins directory of eclipse. The name of the directory
+# within the plugins directory should be the same as the ECLIPSE_DOC_ID value.
+# After copying Eclipse needs to be restarted before the help appears.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_ECLIPSEHELP   = NO
+
+# A unique identifier for the Eclipse help plugin. When installing the plugin
+# the directory name containing the HTML and XML files should also have this
+# name. Each documentation set should have its own identifier.
+# The default value is: org.doxygen.Project.
+# This tag requires that the tag GENERATE_ECLIPSEHELP is set to YES.
+
+ECLIPSE_DOC_ID         = org.doxygen.Project
+
+# If you want full control over the layout of the generated HTML pages it might
+# be necessary to disable the index and replace it with your own. The
+# DISABLE_INDEX tag can be used to turn on/off the condensed index (tabs) at top
+# of each HTML page. A value of NO enables the index and the value YES disables
+# it. Since the tabs in the index contain the same information as the navigation
+# tree, you can set this option to YES if you also set GENERATE_TREEVIEW to YES.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+DISABLE_INDEX          = NO
+
+# The GENERATE_TREEVIEW tag is used to specify whether a tree-like index
+# structure should be generated to display hierarchical information. If the tag
+# value is set to YES, a side panel will be generated containing a tree-like
+# index structure (just like the one that is generated for HTML Help). For this
+# to work a browser that supports JavaScript, DHTML, CSS and frames is required
+# (i.e. any modern browser). Windows users are probably better off using the
+# HTML help feature. Via custom style sheets (see HTML_EXTRA_STYLESHEET) one can
+# further fine tune the look of the index (see "Fine-tuning the output"). As an
+# example, the default style sheet generated by Doxygen has an example that
+# shows how to put an image at the root of the tree instead of the PROJECT_NAME.
+# Since the tree basically has more details information than the tab index, you
+# could consider setting DISABLE_INDEX to YES when enabling this option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+GENERATE_TREEVIEW      = NO
+
+# When GENERATE_TREEVIEW is set to YES, the PAGE_OUTLINE_PANEL option determines
+# if an additional navigation panel is shown at the right hand side of the
+# screen, displaying an outline of the contents of the main page, similar to
+# e.g. https://developer.android.com/reference If GENERATE_TREEVIEW is set to
+# NO, this option has no effect.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+PAGE_OUTLINE_PANEL     = YES
+
+# When GENERATE_TREEVIEW is set to YES, the FULL_SIDEBAR option determines if
+# the side bar is limited to only the treeview area (value NO) or if it should
+# extend to the full height of the window (value YES). Setting this to YES gives
+# a layout similar to e.g. https://docs.readthedocs.io with more room for
+# contents, but less room for the project logo, title, and description. If
+# GENERATE_TREEVIEW is set to NO, this option has no effect.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FULL_SIDEBAR           = NO
+
+# The ENUM_VALUES_PER_LINE tag can be used to set the number of enum values that
+# Doxygen will group on one line in the generated HTML documentation.
+#
+# Note that a value of 0 will completely suppress the enum values from appearing
+# in the overview section.
+# Minimum value: 0, maximum value: 20, default value: 4.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+ENUM_VALUES_PER_LINE   = 4
+
+# When the SHOW_ENUM_VALUES tag is set doxygen will show the specified
+# enumeration values besides the enumeration mnemonics.
+# The default value is: NO.
+
+SHOW_ENUM_VALUES       = NO
+
+# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be used
+# to set the initial width (in pixels) of the frame in which the tree is shown.
+# Minimum value: 0, maximum value: 1500, default value: 250.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+TREEVIEW_WIDTH         = 250
+
+# If the EXT_LINKS_IN_WINDOW option is set to YES, Doxygen will open links to
+# external symbols imported via tag files in a separate window.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+EXT_LINKS_IN_WINDOW    = NO
+
+# If the OBFUSCATE_EMAILS tag is set to YES, Doxygen will obfuscate email
+# addresses.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+OBFUSCATE_EMAILS       = YES
+
+# If the HTML_FORMULA_FORMAT option is set to svg, Doxygen will use the pdf2svg
+# tool (see https://github.com/dawbarton/pdf2svg) or inkscape (see
+# https://inkscape.org) to generate formulas as SVG images instead of PNGs for
+# the HTML output. These images will generally look nicer at scaled resolutions.
+# Possible values are: png (the default) and svg (looks nicer but requires the
+# pdf2svg or inkscape tool).
+# The default value is: png.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+HTML_FORMULA_FORMAT    = png
+
+# Use this tag to change the font size of LaTeX formulas included as images in
+# the HTML documentation. When you change the font size after a successful
+# Doxygen run you need to manually remove any form_*.png images from the HTML
+# output directory to force them to be regenerated.
+# Minimum value: 8, maximum value: 50, default value: 10.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+FORMULA_FONTSIZE       = 10
+
+# The FORMULA_MACROFILE can contain LaTeX \newcommand and \renewcommand commands
+# to create new LaTeX commands to be used in formulas as building blocks. See
+# the section "Including formulas" for details.
+
+FORMULA_MACROFILE      =
+
+# Enable the USE_MATHJAX option to render LaTeX formulas using MathJax (see
+# https://www.mathjax.org) which uses client side JavaScript for the rendering
+# instead of using pre-rendered bitmaps. Use this if you do not have LaTeX
+# installed or if you want to formulas look prettier in the HTML output. When
+# enabled you may also need to install MathJax separately and configure the path
+# to it using the MATHJAX_RELPATH option.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+USE_MATHJAX            = NO
+
+# With MATHJAX_VERSION it is possible to specify the MathJax version to be used.
+# Note that the different versions of MathJax have different requirements with
+# regards to the different settings, so it is possible that also other MathJax
+# settings have to be changed when switching between the different MathJax
+# versions.
+# Possible values are: MathJax_2 and MathJax_3.
+# The default value is: MathJax_2.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_VERSION        = MathJax_2
+
+# When MathJax is enabled you can set the default output format to be used for
+# the MathJax output. For more details about the output format see MathJax
+# version 2 (see:
+# http://docs.mathjax.org/en/v2.7-latest/output.html) and MathJax version 3
+# (see:
+# http://docs.mathjax.org/en/latest/web/components/output.html).
+# Possible values are: HTML-CSS (which is slower, but has the best
+# compatibility. This is the name for Mathjax version 2, for MathJax version 3
+# this will be translated into chtml), NativeMML (i.e. MathML. Only supported
+# for MathJax 2. For MathJax version 3 chtml will be used instead.), chtml (This
+# is the name for Mathjax version 3, for MathJax version 2 this will be
+# translated into HTML-CSS) and SVG.
+# The default value is: HTML-CSS.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_FORMAT         = HTML-CSS
+
+# When MathJax is enabled you need to specify the location relative to the HTML
+# output directory using the MATHJAX_RELPATH option. The destination directory
+# should contain the MathJax.js script. For instance, if the mathjax directory
+# is located at the same level as the HTML output directory, then
+# MATHJAX_RELPATH should be ../mathjax. The default value points to the MathJax
+# Content Delivery Network so you can quickly see the result without installing
+# MathJax. However, it is strongly recommended to install a local copy of
+# MathJax from https://www.mathjax.org before deployment. The default value is:
+# - in case of MathJax version 2: https://cdn.jsdelivr.net/npm/mathjax@2
+# - in case of MathJax version 3: https://cdn.jsdelivr.net/npm/mathjax@3
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_RELPATH        = http://cdn.mathjax.org/mathjax/latest
+
+# The MATHJAX_EXTENSIONS tag can be used to specify one or more MathJax
+# extension names that should be enabled during MathJax rendering. For example
+# for MathJax version 2 (see
+# https://docs.mathjax.org/en/v2.7-latest/tex.html#tex-and-latex-extensions):
+# MATHJAX_EXTENSIONS = TeX/AMSmath TeX/AMSsymbols
+# For example for MathJax version 3 (see
+# http://docs.mathjax.org/en/latest/input/tex/extensions/index.html):
+# MATHJAX_EXTENSIONS = ams
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_EXTENSIONS     =
+
+# The MATHJAX_CODEFILE tag can be used to specify a file with JavaScript pieces
+# of code that will be used on startup of the MathJax code. See the MathJax site
+# (see:
+# http://docs.mathjax.org/en/v2.7-latest/output.html) for more details. For an
+# example see the documentation.
+# This tag requires that the tag USE_MATHJAX is set to YES.
+
+MATHJAX_CODEFILE       =
+
+# When the SEARCHENGINE tag is enabled Doxygen will generate a search box for
+# the HTML output. The underlying search engine uses JavaScript and DHTML and
+# should work on any modern browser. Note that when using HTML help
+# (GENERATE_HTMLHELP), Qt help (GENERATE_QHP), or docsets (GENERATE_DOCSET)
+# there is already a search function so this one should typically be disabled.
+# For large projects the JavaScript based search engine can be slow, then
+# enabling SERVER_BASED_SEARCH may provide a better solution. It is possible to
+# search using the keyboard; to jump to the search box use <access key> + S
+# (what the <access key> is depends on the OS and browser, but it is typically
+# <CTRL>, <ALT>/<option>, or both). Inside the search box use the <cursor down
+# key> to jump into the search results window, the results can be navigated
+# using the <cursor keys>. Press <Enter> to select an item or <escape> to cancel
+# the search. The filter options can be selected when the cursor is inside the
+# search box by pressing <Shift>+<cursor down>. Also here use the <cursor keys>
+# to select a filter and <Enter> or <escape> to activate or cancel the filter
+# option.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_HTML is set to YES.
+
+SEARCHENGINE           = YES
+
+# When the SERVER_BASED_SEARCH tag is enabled the search engine will be
+# implemented using a web server instead of a web client using JavaScript. There
+# are two flavors of web server based searching depending on the EXTERNAL_SEARCH
+# setting. When disabled, Doxygen will generate a PHP script for searching and
+# an index file used by the script. When EXTERNAL_SEARCH is enabled the indexing
+# and searching needs to be provided by external tools. See the section
+# "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SERVER_BASED_SEARCH    = NO
+
+# When EXTERNAL_SEARCH tag is enabled Doxygen will no longer generate the PHP
+# script for searching. Instead the search results are written to an XML file
+# which needs to be processed by an external indexer. Doxygen will invoke an
+# external search engine pointed to by the SEARCHENGINE_URL option to obtain the
+# search results.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see:
+# https://xapian.org/).
+#
+# See the section "External Indexing and Searching" for details.
+# The default value is: NO.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH        = NO
+
+# The SEARCHENGINE_URL should point to a search engine hosted by a web server
+# which will return the search results when EXTERNAL_SEARCH is enabled.
+#
+# Doxygen ships with an example indexer (doxyindexer) and search engine
+# (doxysearch.cgi) which are based on the open source search engine library
+# Xapian (see:
+# https://xapian.org/). See the section "External Indexing and Searching" for
+# details.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHENGINE_URL       =
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the unindexed
+# search data is written to a file for indexing by an external tool. With the
+# SEARCHDATA_FILE tag the name of this file can be specified.
+# The default file is: searchdata.xml.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+SEARCHDATA_FILE        = searchdata.xml
+
+# When SERVER_BASED_SEARCH and EXTERNAL_SEARCH are both enabled the
+# EXTERNAL_SEARCH_ID tag can be used as an identifier for the project. This is
+# useful in combination with EXTRA_SEARCH_MAPPINGS to search through multiple
+# projects and redirect the results back to the right project.
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTERNAL_SEARCH_ID     =
+
+# The EXTRA_SEARCH_MAPPINGS tag can be used to enable searching through Doxygen
+# projects other than the one defined by this configuration file, but that are
+# all added to the same external search index. Each project needs to have a
+# unique id set via EXTERNAL_SEARCH_ID. The search mapping then maps the id of
+# to a relative location where the documentation can be found. The format is:
+# EXTRA_SEARCH_MAPPINGS = tagname1=loc1 tagname2=loc2 ...
+# This tag requires that the tag SEARCHENGINE is set to YES.
+
+EXTRA_SEARCH_MAPPINGS  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_LATEX tag is set to YES, Doxygen will generate LaTeX output.
+# The default value is: YES.
+
+GENERATE_LATEX         = NO
+
+# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: latex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_OUTPUT           = latex
+
+# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
+# invoked.
+#
+# Note that when not enabling USE_PDFLATEX the default is latex when enabling
+# USE_PDFLATEX the default is pdflatex and when in the later case latex is
+# chosen this is overwritten by pdflatex. For specific output languages the
+# default can have been set differently, this depends on the implementation of
+# the output language.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_CMD_NAME         = latex
+
+# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to generate
+# index for LaTeX.
+# Note: This tag is used in the Makefile / make.bat.
+# See also: LATEX_MAKEINDEX_CMD for the part in the generated output file
+# (.tex).
+# The default file is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+MAKEINDEX_CMD_NAME     = makeindex
+
+# The LATEX_MAKEINDEX_CMD tag can be used to specify the command name to
+# generate index for LaTeX. In case there is no backslash (\) as first character
+# it will be automatically added in the LaTeX code.
+# Note: This tag is used in the generated output file (.tex).
+# See also: MAKEINDEX_CMD_NAME for the part in the Makefile / make.bat.
+# The default value is: makeindex.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_MAKEINDEX_CMD    = makeindex
+
+# If the COMPACT_LATEX tag is set to YES, Doxygen generates more compact LaTeX
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+COMPACT_LATEX          = NO
+
+# The PAPER_TYPE tag can be used to set the paper type that is used by the
+# printer.
+# Possible values are: a4 (210 x 297 mm), letter (8.5 x 11 inches), legal (8.5 x
+# 14 inches) and executive (7.25 x 10.5 inches).
+# The default value is: a4.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PAPER_TYPE             = a4
+
+# The EXTRA_PACKAGES tag can be used to specify one or more LaTeX package names
+# that should be included in the LaTeX output. The package can be specified just
+# by its name or with the correct syntax as to be used with the LaTeX
+# \usepackage command. To get the times font for instance you can specify :
+# EXTRA_PACKAGES=times or EXTRA_PACKAGES={times}
+# To use the option intlimits with the amsmath package you can specify:
+# EXTRA_PACKAGES=[intlimits]{amsmath}
+# If left blank no extra packages will be included.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+EXTRA_PACKAGES         =
+
+# The LATEX_HEADER tag can be used to specify a user-defined LaTeX header for
+# the generated LaTeX document. The header should contain everything until the
+# first chapter. If it is left blank Doxygen will generate a standard header. It
+# is highly recommended to start with a default header using
+# doxygen -w latex new_header.tex new_footer.tex new_stylesheet.sty
+# and then modify the file new_header.tex. See also section "Doxygen usage" for
+# information on how to generate the default header that Doxygen normally uses.
+#
+# Note: Only use a user-defined header if you know what you are doing!
+# Note: The header is subject to change so you typically have to regenerate the
+# default header when upgrading to a newer version of Doxygen. The following
+# commands have a special meaning inside the header (and footer): For a
+# description of the possible markers and block names see the documentation.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HEADER           =
+
+# The LATEX_FOOTER tag can be used to specify a user-defined LaTeX footer for
+# the generated LaTeX document. The footer should contain everything after the
+# last chapter. If it is left blank Doxygen will generate a standard footer. See
+# LATEX_HEADER for more information on how to generate a default footer and what
+# special commands can be used inside the footer. See also section "Doxygen
+# usage" for information on how to generate the default footer that Doxygen
+# normally uses. Note: Only use a user-defined footer if you know what you are
+# doing!
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_FOOTER           =
+
+# The LATEX_EXTRA_STYLESHEET tag can be used to specify additional user-defined
+# LaTeX style sheets that are included after the standard style sheets created
+# by Doxygen. Using this option one can overrule certain style aspects. Doxygen
+# will copy the style sheet files to the output directory.
+# Note: The order of the extra style sheet files is of importance (e.g. the last
+# style sheet in the list overrules the setting of the previous ones in the
+# list).
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_STYLESHEET =
+
+# The LATEX_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the LATEX_OUTPUT output
+# directory. Note that the files will be copied as-is; there are no commands or
+# markers available.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EXTRA_FILES      =
+
+# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated is
+# prepared for conversion to PDF (using ps2pdf or pdflatex). The PDF file will
+# contain links (just like the HTML output) instead of page references. This
+# makes the output suitable for online browsing using a PDF viewer.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+PDF_HYPERLINKS         = YES
+
+# If the USE_PDFLATEX tag is set to YES, Doxygen will use the engine as
+# specified with LATEX_CMD_NAME to generate the PDF file directly from the LaTeX
+# files. Set this option to YES, to get a higher quality PDF documentation.
+#
+# See also section LATEX_CMD_NAME for selecting the engine.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+USE_PDFLATEX           = YES
+
+# The LATEX_BATCHMODE tag signals the behavior of LaTeX in case of an error.
+# Possible values are: NO same as ERROR_STOP, YES same as BATCH, BATCH In batch
+# mode nothing is printed on the terminal, errors are scrolled as if <return> is
+# hit at every error; missing files that TeX tries to input or request from
+# keyboard input (\read on a not open input stream) cause the job to abort,
+# NON_STOP In nonstop mode the diagnostic message will appear on the terminal,
+# but there is no possibility of user interaction just like in batch mode,
+# SCROLL In scroll mode, TeX will stop only for missing files to input or if
+# keyboard input is necessary and ERROR_STOP In errorstop mode, TeX will stop at
+# each error, asking for user intervention.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BATCHMODE        = NO
+
+# If the LATEX_HIDE_INDICES tag is set to YES then Doxygen will not include the
+# index chapters (such as File Index, Compound Index, etc.) in the output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_HIDE_INDICES     = NO
+
+# The LATEX_BIB_STYLE tag can be used to specify the style to use for the
+# bibliography, e.g. plainnat, or ieeetr. See
+# https://en.wikipedia.org/wiki/BibTeX and \cite for more info.
+# The default value is: plainnat.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_BIB_STYLE        = plain
+
+# The LATEX_EMOJI_DIRECTORY tag is used to specify the (relative or absolute)
+# path from which the emoji images will be read. If a relative path is entered,
+# it will be relative to the LATEX_OUTPUT directory. If left blank the
+# LATEX_OUTPUT directory will be used.
+# This tag requires that the tag GENERATE_LATEX is set to YES.
+
+LATEX_EMOJI_DIRECTORY  =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the RTF output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_RTF tag is set to YES, Doxygen will generate RTF output. The
+# RTF output is optimized for Word 97 and may not look too pretty with other RTF
+# readers/editors.
+# The default value is: NO.
+
+GENERATE_RTF           = NO
+
+# The RTF_OUTPUT tag is used to specify where the RTF docs will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: rtf.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_OUTPUT             = rtf
+
+# If the COMPACT_RTF tag is set to YES, Doxygen generates more compact RTF
+# documents. This may be useful for small projects and may help to save some
+# trees in general.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+COMPACT_RTF            = NO
+
+# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated will
+# contain hyperlink fields. The RTF file will contain links (just like the HTML
+# output) instead of page references. This makes the output suitable for online
+# browsing using Word or some other Word compatible readers that support those
+# fields.
+#
+# Note: WordPad (write) and others do not support links.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_HYPERLINKS         = NO
+
+# Load stylesheet definitions from file. Syntax is similar to Doxygen's
+# configuration file, i.e. a series of assignments. You only have to provide
+# replacements, missing definitions are set to their default value.
+#
+# See also section "Doxygen usage" for information on how to generate the
+# default style sheet that Doxygen normally uses.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_STYLESHEET_FILE    =
+
+# Set optional variables used in the generation of an RTF document. Syntax is
+# similar to Doxygen's configuration file. A template extensions file can be
+# generated using doxygen -e rtf extensionFile.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTENSIONS_FILE    =
+
+# The RTF_EXTRA_FILES tag can be used to specify one or more extra images or
+# other source files which should be copied to the RTF_OUTPUT output directory.
+# Note that the files will be copied as-is; there are no commands or markers
+# available.
+# This tag requires that the tag GENERATE_RTF is set to YES.
+
+RTF_EXTRA_FILES        =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the man page output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_MAN tag is set to YES, Doxygen will generate man pages for
+# classes and files.
+# The default value is: NO.
+
+GENERATE_MAN           = NO
+
+# The MAN_OUTPUT tag is used to specify where the man pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it. A directory man3 will be created inside the directory specified by
+# MAN_OUTPUT.
+# The default directory is: man.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_OUTPUT             = man
+
+# The MAN_EXTENSION tag determines the extension that is added to the generated
+# man pages. In case the manual section does not start with a number, the number
+# 3 is prepended. The dot (.) at the beginning of the MAN_EXTENSION tag is
+# optional.
+# The default value is: .3.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_EXTENSION          = .3
+
+# The MAN_SUBDIR tag determines the name of the directory created within
+# MAN_OUTPUT in which the man pages are placed. If defaults to man followed by
+# MAN_EXTENSION with the initial . removed.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_SUBDIR             =
+
+# If the MAN_LINKS tag is set to YES and Doxygen generates man output, then it
+# will generate one additional man file for each entity documented in the real
+# man page(s). These additional files only source the real man page, but without
+# them the man command would be unable to find the correct page.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_MAN is set to YES.
+
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the XML output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_XML tag is set to YES, Doxygen will generate an XML file that
+# captures the structure of the code including all documentation.
+# The default value is: NO.
+
+GENERATE_XML           = YES
+
+# The XML_OUTPUT tag is used to specify where the XML pages will be put. If a
+# relative path is entered the value of OUTPUT_DIRECTORY will be put in front of
+# it.
+# The default directory is: xml.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_OUTPUT             = xml
+
+# If the XML_PROGRAMLISTING tag is set to YES, Doxygen will dump the program
+# listings (including syntax highlighting and cross-referencing information) to
+# the XML output. Note that enabling this will significantly increase the size
+# of the XML output.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_PROGRAMLISTING     = NO
+
+# If the XML_NS_MEMB_FILE_SCOPE tag is set to YES, Doxygen will include
+# namespace members in file scope as well, matching the HTML output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_XML is set to YES.
+
+XML_NS_MEMB_FILE_SCOPE = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to the DOCBOOK output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_DOCBOOK tag is set to YES, Doxygen will generate Docbook files
+# that can be used to generate PDF.
+# The default value is: NO.
+
+GENERATE_DOCBOOK       = NO
+
+# The DOCBOOK_OUTPUT tag is used to specify where the Docbook pages will be put.
+# If a relative path is entered the value of OUTPUT_DIRECTORY will be put in
+# front of it.
+# The default directory is: docbook.
+# This tag requires that the tag GENERATE_DOCBOOK is set to YES.
+
+DOCBOOK_OUTPUT         = docbook
+
+#---------------------------------------------------------------------------
+# Configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_AUTOGEN_DEF tag is set to YES, Doxygen will generate an
+# AutoGen Definitions (see https://autogen.sourceforge.net/) file that captures
+# the structure of the code including all documentation. Note that this feature
+# is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# Configuration options related to Sqlite3 output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_SQLITE3 tag is set to YES Doxygen will generate a Sqlite3
+# database with symbols found by Doxygen stored in tables.
+# The default value is: NO.
+
+GENERATE_SQLITE3       = NO
+
+# The SQLITE3_OUTPUT tag is used to specify where the Sqlite3 database will be
+# put. If a relative path is entered the value of OUTPUT_DIRECTORY will be put
+# in front of it.
+# The default directory is: sqlite3.
+# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
+
+SQLITE3_OUTPUT         = sqlite3
+
+# The SQLITE3_RECREATE_DB tag is set to YES, the existing doxygen_sqlite3.db
+# database file will be recreated with each Doxygen run. If set to NO, Doxygen
+# will warn if a database file is already found and not modify it.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_SQLITE3 is set to YES.
+
+SQLITE3_RECREATE_DB    = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+
+# If the GENERATE_PERLMOD tag is set to YES, Doxygen will generate a Perl module
+# file that captures the structure of the code including all documentation.
+#
+# Note that this feature is still experimental and incomplete at the moment.
+# The default value is: NO.
+
+GENERATE_PERLMOD       = NO
+
+# If the PERLMOD_LATEX tag is set to YES, Doxygen will generate the necessary
+# Makefile rules, Perl scripts and LaTeX code to be able to generate PDF and DVI
+# output from the Perl module output.
+# The default value is: NO.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_LATEX          = NO
+
+# If the PERLMOD_PRETTY tag is set to YES, the Perl module output will be nicely
+# formatted so it can be parsed by a human reader. This is useful if you want to
+# understand what is going on. On the other hand, if this tag is set to NO, the
+# size of the Perl module output will be much smaller and Perl will parse it
+# just the same.
+# The default value is: YES.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_PRETTY         = YES
+
+# The names of the make variables in the generated doxyrules.make file are
+# prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX. This is useful
+# so different doxyrules.make files included by the same Makefile don't
+# overwrite each other's variables.
+# This tag requires that the tag GENERATE_PERLMOD is set to YES.
+
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+
+# If the ENABLE_PREPROCESSING tag is set to YES, Doxygen will evaluate all
+# C-preprocessor directives found in the sources and include files.
+# The default value is: YES.
+
+ENABLE_PREPROCESSING   = YES
+
+# If the MACRO_EXPANSION tag is set to YES, Doxygen will expand all macro names
+# in the source code. If set to NO, only conditional compilation will be
+# performed. Macro expansion can be done in a controlled way by setting
+# EXPAND_ONLY_PREDEF to YES.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+MACRO_EXPANSION        = YES
+
+# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES then
+# the macro expansion is limited to the macros specified with the PREDEFINED and
+# EXPAND_AS_DEFINED tags.
+# The default value is: NO.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_ONLY_PREDEF     = NO
+
+# If the SEARCH_INCLUDES tag is set to YES, the include files in the
+# INCLUDE_PATH will be searched if a #include is found.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SEARCH_INCLUDES        = YES
+
+# The INCLUDE_PATH tag can be used to specify one or more directories that
+# contain include files that are not input files but should be processed by the
+# preprocessor. Note that the INCLUDE_PATH is not recursive, so the setting of
+# RECURSIVE has no effect here.
+# This tag requires that the tag SEARCH_INCLUDES is set to YES.
+
+INCLUDE_PATH           =
+
+# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
+# patterns (like *.h and *.hpp) to filter out the header-files in the
+# directories. If left blank, the patterns specified with FILE_PATTERNS will be
+# used.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+INCLUDE_FILE_PATTERNS  =
+
+# The PREDEFINED tag can be used to specify one or more macro names that are
+# defined before the preprocessor is started (similar to the -D option of e.g.
+# gcc). The argument of the tag is a list of macros of the form: name or
+# name=definition (no spaces). If the definition and the "=" are omitted, "=1"
+# is assumed. To prevent a macro definition from being undefined via #undef or
+# recursively expanded use the := operator instead of the = operator.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+PREDEFINED             =
+
+# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then this
+# tag can be used to specify a list of macro names that should be expanded. The
+# macro definition that is found in the sources will be used. Use the PREDEFINED
+# tag if you want to use a different macro definition that overrules the
+# definition found in the source code.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+EXPAND_AS_DEFINED      =
+
+# If the SKIP_FUNCTION_MACROS tag is set to YES then Doxygen's preprocessor will
+# remove all references to function-like macros that are alone on a line, have
+# an all uppercase name, and do not end with a semicolon. Such function macros
+# are typically used for boiler-plate code, and will confuse the parser if not
+# removed.
+# The default value is: YES.
+# This tag requires that the tag ENABLE_PREPROCESSING is set to YES.
+
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to external references
+#---------------------------------------------------------------------------
+
+# The TAGFILES tag can be used to specify one or more tag files. For each tag
+# file the location of the external documentation should be added. The format of
+# a tag file without this location is as follows:
+# TAGFILES = file1 file2 ...
+# Adding location for the tag files is done as follows:
+# TAGFILES = file1=loc1 "file2 = loc2" ...
+# where loc1 and loc2 can be relative or absolute paths or URLs. See the
+# section "Linking to external documentation" for more information about the use
+# of tag files.
+# Note: Each tag file must have a unique name (where the name does NOT include
+# the path). If a tag file is not located in the directory in which Doxygen is
+# run, you must also specify the path to the tagfile here.
+
+TAGFILES               =
+
+# When a file name is specified after GENERATE_TAGFILE, Doxygen will create a
+# tag file that is based on the input files it reads. See section "Linking to
+# external documentation" for more information about the usage of tag files.
+
+GENERATE_TAGFILE       =
+
+# If the ALLEXTERNALS tag is set to YES, all external classes and namespaces
+# will be listed in the class and namespace index. If set to NO, only the
+# inherited external classes will be listed.
+# The default value is: NO.
+
+ALLEXTERNALS           = NO
+
+# If the EXTERNAL_GROUPS tag is set to YES, all external groups will be listed
+# in the topic index. If set to NO, only the current project's groups will be
+# listed.
+# The default value is: YES.
+
+EXTERNAL_GROUPS        = YES
+
+# If the EXTERNAL_PAGES tag is set to YES, all external pages will be listed in
+# the related pages index. If set to NO, only the current project's pages will
+# be listed.
+# The default value is: YES.
+
+EXTERNAL_PAGES         = YES
+
+#---------------------------------------------------------------------------
+# Configuration options related to diagram generator tools
+#---------------------------------------------------------------------------
+
+# If set to YES the inheritance and collaboration graphs will hide inheritance
+# and usage relations if the target is undocumented or is not a class.
+# The default value is: YES.
+
+HIDE_UNDOC_RELATIONS   = YES
+
+# If you set the HAVE_DOT tag to YES then Doxygen will assume the dot tool is
+# available from the path. This tool is part of Graphviz (see:
+# https://www.graphviz.org/), a graph visualization toolkit from AT&T and Lucent
+# Bell Labs. The other options in this section have no effect if this option is
+# set to NO
+# The default value is: NO.
+
+HAVE_DOT               = NO
+
+# The DOT_NUM_THREADS specifies the number of dot invocations Doxygen is allowed
+# to run in parallel. When set to 0 Doxygen will base this on the number of
+# processors available in the system. You can set it explicitly to a value
+# larger than 0 to get control over the balance between CPU load and processing
+# speed.
+# Minimum value: 0, maximum value: 32, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NUM_THREADS        = 0
+
+# DOT_COMMON_ATTR is common attributes for nodes, edges and labels of
+# subgraphs. When you want a differently looking font in the dot files that
+# Doxygen generates you can specify fontname, fontcolor and fontsize attributes.
+# For details please see <a href=https://graphviz.org/doc/info/attrs.html>Node,
+# Edge and Graph Attributes specification</a> You need to make sure dot is able
+# to find the font, which can be done by putting it in a standard location or by
+# setting the DOTFONTPATH environment variable or by setting DOT_FONTPATH to the
+# directory containing the font. Default graphviz fontsize is 14.
+# The default value is: fontname=Helvetica,fontsize=10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_COMMON_ATTR        = "fontname=Helvetica,fontsize=10"
+
+# DOT_EDGE_ATTR is concatenated with DOT_COMMON_ATTR. For elegant style you can
+# add 'arrowhead=open, arrowtail=open, arrowsize=0.5'. <a
+# href=https://graphviz.org/doc/info/arrows.html>Complete documentation about
+# arrows shapes.</a>
+# The default value is: labelfontname=Helvetica,labelfontsize=10.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_EDGE_ATTR          = "labelfontname=Helvetica,labelfontsize=10"
+
+# DOT_NODE_ATTR is concatenated with DOT_COMMON_ATTR. For view without boxes
+# around nodes set 'shape=plain' or 'shape=plaintext' <a
+# href=https://www.graphviz.org/doc/info/shapes.html>Shapes specification</a>
+# The default value is: shape=box,height=0.2,width=0.4.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_NODE_ATTR          = "shape=box,height=0.2,width=0.4"
+
+# You can set the path where dot can find font specified with fontname in
+# DOT_COMMON_ATTR and others dot attributes.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_FONTPATH           =
+
+# If the CLASS_GRAPH tag is set to YES or GRAPH or BUILTIN then Doxygen will
+# generate a graph for each documented class showing the direct and indirect
+# inheritance relations. In case the CLASS_GRAPH tag is set to YES or GRAPH and
+# HAVE_DOT is enabled as well, then dot will be used to draw the graph. In case
+# the CLASS_GRAPH tag is set to YES and HAVE_DOT is disabled or if the
+# CLASS_GRAPH tag is set to BUILTIN, then the built-in generator will be used.
+# If the CLASS_GRAPH tag is set to TEXT the direct and indirect inheritance
+# relations will be shown as texts / links. Explicit enabling an inheritance
+# graph or choosing a different representation for an inheritance graph of a
+# specific class, can be accomplished by means of the command \inheritancegraph.
+# Disabling an inheritance graph can be accomplished by means of the command
+# \hideinheritancegraph.
+# Possible values are: NO, YES, TEXT, GRAPH and BUILTIN.
+# The default value is: YES.
+
+CLASS_GRAPH            = TEXT
+
+# If the COLLABORATION_GRAPH tag is set to YES then Doxygen will generate a
+# graph for each documented class showing the direct and indirect implementation
+# dependencies (inheritance, containment, and class references variables) of the
+# class with other documented classes. Explicit enabling a collaboration graph,
+# when COLLABORATION_GRAPH is set to NO, can be accomplished by means of the
+# command \collaborationgraph. Disabling a collaboration graph can be
+# accomplished by means of the command \hidecollaborationgraph.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+COLLABORATION_GRAPH    = YES
+
+# If the GROUP_GRAPHS tag is set to YES then Doxygen will generate a graph for
+# groups, showing the direct groups dependencies. Explicit enabling a group
+# dependency graph, when GROUP_GRAPHS is set to NO, can be accomplished by means
+# of the command \groupgraph. Disabling a directory graph can be accomplished by
+# means of the command \hidegroupgraph. See also the chapter Grouping in the
+# manual.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GROUP_GRAPHS           = YES
+
+# If the UML_LOOK tag is set to YES, Doxygen will generate inheritance and
+# collaboration diagrams in a style similar to the OMG's Unified Modeling
+# Language.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+UML_LOOK               = NO
+
+# If the UML_LOOK tag is enabled, the fields and methods are shown inside the
+# class node. If there are many fields or methods and many nodes the graph may
+# become too big to be useful. The UML_LIMIT_NUM_FIELDS threshold limits the
+# number of items for each type to make the size more manageable. Set this to 0
+# for no limit. Note that the threshold may be exceeded by 50% before the limit
+# is enforced. So when you set the threshold to 10, up to 15 fields may appear,
+# but if the number exceeds 15, the total amount of fields shown is limited to
+# 10.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag UML_LOOK is set to YES.
+
+UML_LIMIT_NUM_FIELDS   = 10
+
+# If the UML_LOOK tag is enabled, field labels are shown along the edge between
+# two class nodes. If there are many fields and many nodes the graph may become
+# too cluttered. The UML_MAX_EDGE_LABELS threshold limits the number of items to
+# make the size more manageable. Set this to 0 for no limit.
+# Minimum value: 0, maximum value: 100, default value: 10.
+# This tag requires that the tag UML_LOOK is set to YES.
+
+UML_MAX_EDGE_LABELS    = 10
+
+# If the DOT_UML_DETAILS tag is set to NO, Doxygen will show attributes and
+# methods without types and arguments in the UML graphs. If the DOT_UML_DETAILS
+# tag is set to YES, Doxygen will add type and arguments for attributes and
+# methods in the UML graphs. If the DOT_UML_DETAILS tag is set to NONE, Doxygen
+# will not generate fields with class member information in the UML graphs. The
+# class diagrams will look similar to the default class diagrams but using UML
+# notation for the relationships.
+# Possible values are: NO, YES and NONE.
+# The default value is: NO.
+# This tag requires that the tag UML_LOOK is set to YES.
+
+DOT_UML_DETAILS        = NO
+
+# The DOT_WRAP_THRESHOLD tag can be used to set the maximum number of characters
+# to display on a single line. If the actual line length exceeds this threshold
+# significantly it will be wrapped across multiple lines. Some heuristics are
+# applied to avoid ugly line breaks.
+# Minimum value: 0, maximum value: 1000, default value: 17.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_WRAP_THRESHOLD     = 17
+
+# If the TEMPLATE_RELATIONS tag is set to YES then the inheritance and
+# collaboration graphs will show the relations between templates and their
+# instances.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+TEMPLATE_RELATIONS     = NO
+
+# If the INCLUDE_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are set to
+# YES then Doxygen will generate a graph for each documented file showing the
+# direct and indirect include dependencies of the file with other documented
+# files. Explicit enabling an include graph, when INCLUDE_GRAPH is is set to NO,
+# can be accomplished by means of the command \includegraph. Disabling an
+# include graph can be accomplished by means of the command \hideincludegraph.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDE_GRAPH          = YES
+
+# If the INCLUDED_BY_GRAPH, ENABLE_PREPROCESSING and SEARCH_INCLUDES tags are
+# set to YES then Doxygen will generate a graph for each documented file showing
+# the direct and indirect include dependencies of the file with other documented
+# files. Explicit enabling an included by graph, when INCLUDED_BY_GRAPH is set
+# to NO, can be accomplished by means of the command \includedbygraph. Disabling
+# an included by graph can be accomplished by means of the command
+# \hideincludedbygraph.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INCLUDED_BY_GRAPH      = YES
+
+# If the CALL_GRAPH tag is set to YES then Doxygen will generate a call
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable call graphs for selected
+# functions only using the \callgraph command. Disabling a call graph can be
+# accomplished by means of the command \hidecallgraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALL_GRAPH             = NO
+
+# If the CALLER_GRAPH tag is set to YES then Doxygen will generate a caller
+# dependency graph for every global function or class method.
+#
+# Note that enabling this option will significantly increase the time of a run.
+# So in most cases it will be better to enable caller graphs for selected
+# functions only using the \callergraph command. Disabling a caller graph can be
+# accomplished by means of the command \hidecallergraph.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+CALLER_GRAPH           = NO
+
+# If the GRAPHICAL_HIERARCHY tag is set to YES then Doxygen will graphical
+# hierarchy of all classes instead of a textual one.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GRAPHICAL_HIERARCHY    = YES
+
+# If the DIRECTORY_GRAPH tag is set to YES then Doxygen will show the
+# dependencies a directory has on other directories in a graphical way. The
+# dependency relations are determined by the #include relations between the
+# files in the directories. Explicit enabling a directory graph, when
+# DIRECTORY_GRAPH is set to NO, can be accomplished by means of the command
+# \directorygraph. Disabling a directory graph can be accomplished by means of
+# the command \hidedirectorygraph.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DIRECTORY_GRAPH        = YES
+
+# The DIR_GRAPH_MAX_DEPTH tag can be used to limit the maximum number of levels
+# of child directories generated in directory dependency graphs by dot.
+# Minimum value: 1, maximum value: 25, default value: 1.
+# This tag requires that the tag DIRECTORY_GRAPH is set to YES.
+
+DIR_GRAPH_MAX_DEPTH    = 1
+
+# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
+# generated by dot. For an explanation of the image formats see the section
+# output formats in the documentation of the dot tool (Graphviz (see:
+# https://www.graphviz.org/)).
+#
+# Note the formats svg:cairo and svg:cairo:cairo cannot be used in combination
+# with INTERACTIVE_SVG (the INTERACTIVE_SVG will be set to NO).
+# Possible values are: png, jpg, gif, svg, png:gd, png:gd:gd, png:cairo,
+# png:cairo:gd, png:cairo:cairo, png:cairo:gdiplus, png:gdiplus,
+# png:gdiplus:gdiplus, svg:cairo, svg:cairo:cairo, svg:svg, svg:svg:core,
+# gif:cairo, gif:cairo:gd, gif:cairo:gdiplus, gif:gdiplus, gif:gdiplus:gdiplus,
+# gif:gd, gif:gd:gd, jpg:cairo, jpg:cairo:gd, jpg:cairo:gdiplus, jpg:gd,
+# jpg:gd:gd, jpg:gdiplus and jpg:gdiplus:gdiplus.
+# The default value is: png.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_IMAGE_FORMAT       = png
+
+# If DOT_IMAGE_FORMAT is set to svg or svg:svg or svg:svg:core, then this option
+# can be set to YES to enable generation of interactive SVG images that allow
+# zooming and panning.
+#
+# Note that this requires a modern browser other than Internet Explorer. Tested
+# and working are Firefox, Chrome, Safari, and Opera.
+#
+# Note This option will be automatically disabled when DOT_IMAGE_FORMAT is set
+# to svg:cairo or svg:cairo:cairo.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+INTERACTIVE_SVG        = NO
+
+# The DOT_PATH tag can be used to specify the path where the dot tool can be
+# found. If left blank, it is assumed the dot tool can be found in the path.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_PATH               =
+
+# The DOTFILE_DIRS tag can be used to specify one or more directories that
+# contain dot files that are included in the documentation (see the \dotfile
+# command).
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOTFILE_DIRS           =
+
+# You can include diagrams made with dia in Doxygen documentation. Doxygen will
+# then run dia to produce the diagram and insert it in the documentation. The
+# DIA_PATH tag allows you to specify the directory where the dia binary resides.
+# If left empty dia is assumed to be found in the default search path.
+
+DIA_PATH               =
+
+# The DIAFILE_DIRS tag can be used to specify one or more directories that
+# contain dia files that are included in the documentation (see the \diafile
+# command).
+
+DIAFILE_DIRS           =
+
+# When using PlantUML, the PLANTUML_JAR_PATH tag should be used to specify the
+# path where java can find the plantuml.jar file or to the filename of jar file
+# to be used. If left blank, it is assumed PlantUML is not used or called during
+# a preprocessing step. Doxygen will generate a warning when it encounters a
+# \startuml command in this case and will not generate output for the diagram.
+
+PLANTUML_JAR_PATH      =
+
+# When using PlantUML, the PLANTUML_CFG_FILE tag can be used to specify a
+# configuration file for PlantUML.
+
+PLANTUML_CFG_FILE      =
+
+# When using PlantUML, the specified paths are searched for files specified by
+# the !include statement in a PlantUML block.
+
+PLANTUML_INCLUDE_PATH  =
+
+# The PLANTUMLFILE_DIRS tag can be used to specify one or more directories that
+# contain PlantUml files that are included in the documentation (see the
+# \plantumlfile command).
+
+PLANTUMLFILE_DIRS      =
+
+# The DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of nodes
+# that will be shown in the graph. If the number of nodes in a graph becomes
+# larger than this value, Doxygen will truncate the graph, which is visualized
+# by representing a node as a red box. Note that if the number of direct
+# children of the root node in a graph is already larger than
+# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note that
+# the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
+# Minimum value: 0, maximum value: 10000, default value: 50.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_GRAPH_MAX_NODES    = 50
+
+# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the graphs
+# generated by dot. A depth value of 3 means that only nodes reachable from the
+# root by following a path via at most 3 edges will be shown. Nodes that lay
+# further from the root node will be omitted. Note that setting this option to 1
+# or 2 may greatly reduce the computation time needed for large code bases. Also
+# note that the size of a graph can be further restricted by
+# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
+# Minimum value: 0, maximum value: 1000, default value: 0.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+MAX_DOT_GRAPH_DEPTH    = 0
+
+# Set the DOT_MULTI_TARGETS tag to YES to allow dot to generate multiple output
+# files in one run (i.e. multiple -o and -T options on the command line). This
+# makes dot run faster, but since only newer versions of dot (>1.8.10) support
+# this, this feature is disabled by default.
+# The default value is: NO.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+DOT_MULTI_TARGETS      = NO
+
+# If the GENERATE_LEGEND tag is set to YES Doxygen will generate a legend page
+# explaining the meaning of the various boxes and arrows in the dot generated
+# graphs.
+# Note: This tag requires that UML_LOOK isn't set, i.e. the Doxygen internal
+# graphical representation for inheritance and collaboration diagrams is used.
+# The default value is: YES.
+# This tag requires that the tag HAVE_DOT is set to YES.
+
+GENERATE_LEGEND        = YES
+
+# If the DOT_CLEANUP tag is set to YES, Doxygen will remove the intermediate
+# files that are used to generate the various graphs.
+#
+# Note: This setting is not only used for dot files but also for msc temporary
+# files.
+# The default value is: YES.
+
+DOT_CLEANUP            = YES
+
+# You can define message sequence charts within Doxygen comments using the \msc
+# command. If the MSCGEN_TOOL tag is left empty (the default), then Doxygen will
+# use a built-in version of mscgen tool to produce the charts. Alternatively,
+# the MSCGEN_TOOL tag can also specify the name an external tool. For instance,
+# specifying prog as the value, Doxygen will call the tool as prog -T
+# <outfile_format> -o <outputfile> <inputfile>. The external tool should support
+# output file formats "png", "eps", "svg", and "ismap".
+
+MSCGEN_TOOL            =
+
+# The MSCFILE_DIRS tag can be used to specify one or more directories that
+# contain msc files that are included in the documentation (see the \mscfile
+# command).
+
+MSCFILE_DIRS           =
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_delete.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_delete.3
new file mode 100644 (file)
index 0000000..1e7b030
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_abstruse_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <abstruse.h>
+.sp
+\fBf_status_t f_abstruse_delete\fP(
+    \fBf_abstruse_t *const \fP\fIabstruse\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the f_abstruse_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B abstruse
+The abstruse to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An abstruse a structure that represents different possible types.
+.PP
+The type variable is used to designate the type within the f_abstruse_type_t union in use.
+.PP
+De-allocation must be performed when swapping between types when the old type contains dynamically allocated data.
+.PP
+It may be a good idea to use statically allocated data or dynamically allocated data managed elsewhere with this to avoid potential design complications with de-allocation.
+.PP
+is: The value, where "is" is chosen as a variable name so that when type is f_abstruse_type_unsigned_e, then accessing this would be done via "is.a_unsigned".
+.sp
+.RS
+.nf
+\fB
+struct f_abstruse_t {
+  uint8_t           \fItype\fP;
+  f_abstruse_type_t \fIis\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIabstruse.h\fP(3), \fIf_abstruse_delete\fP(3), \fIf_abstruse_destroy\fP(3), \fIf_abstruses_delete_callback\fP(3), \fIf_abstruses_destroy_callback\fP(3), \fIf_abstrusess_delete_callback\fP(3), \fIf_abstrusess_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_destroy.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_destroy.3
new file mode 100644 (file)
index 0000000..d17c49b
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_abstruse_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <abstruse.h>
+.sp
+\fBf_status_t f_abstruse_destroy\fP(
+    \fBf_abstruse_t *const \fP\fIabstruse\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy the f_abstruse_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B abstruse
+The abstruse to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An abstruse a structure that represents different possible types.
+.PP
+The type variable is used to designate the type within the f_abstruse_type_t union in use.
+.PP
+De-allocation must be performed when swapping between types when the old type contains dynamically allocated data.
+.PP
+It may be a good idea to use statically allocated data or dynamically allocated data managed elsewhere with this to avoid potential design complications with de-allocation.
+.PP
+is: The value, where "is" is chosen as a variable name so that when type is f_abstruse_type_unsigned_e, then accessing this would be done via "is.a_unsigned".
+.sp
+.RS
+.nf
+\fB
+struct f_abstruse_t {
+  uint8_t           \fItype\fP;
+  f_abstruse_type_t \fIis\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIabstruse.h\fP(3), \fIf_abstruse_delete\fP(3), \fIf_abstruse_destroy\fP(3), \fIf_abstruses_delete_callback\fP(3), \fIf_abstruses_destroy_callback\fP(3), \fIf_abstrusess_delete_callback\fP(3), \fIf_abstrusess_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_map_delete.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_map_delete.3
new file mode 100644 (file)
index 0000000..0be6f33
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_abstruse_map_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_map_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <map.h>
+.sp
+\fBf_status_t f_abstruse_map_delete\fP(
+    \fBf_abstruse_map_t *const \fP\fImap\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the f_abstruse_map_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B map
+The abstruse map to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A map of an abstruse as the value and a string as the key.
+.PP
+value: The abstruse being mapped by the key.
+.sp
+.RS
+.nf
+\fB
+struct f_abstruse_map_t {
+  f_string_dynamic_t \fIkey\fP;
+  f_abstruse_t       \fIvalue\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap.h\fP(3), \fIf_abstruse_map_delete\fP(3), \fIf_abstruse_map_destroy\fP(3), \fIf_abstruse_maps_delete_callback\fP(3), \fIf_abstruse_maps_destroy_callback\fP(3), \fIf_abstruse_mapss_delete_callback\fP(3), \fIf_abstruse_mapss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_map_destroy.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_map_destroy.3
new file mode 100644 (file)
index 0000000..8b236fd
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_abstruse_map_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_map_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <map.h>
+.sp
+\fBf_status_t f_abstruse_map_destroy\fP(
+    \fBf_abstruse_map_t *const \fP\fImap\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy the f_abstruse_map_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B map
+The abstruse map to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A map of an abstruse as the value and a string as the key.
+.PP
+value: The abstruse being mapped by the key.
+.sp
+.RS
+.nf
+\fB
+struct f_abstruse_map_t {
+  f_string_dynamic_t \fIkey\fP;
+  f_abstruse_t       \fIvalue\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap.h\fP(3), \fIf_abstruse_map_delete\fP(3), \fIf_abstruse_map_destroy\fP(3), \fIf_abstruse_maps_delete_callback\fP(3), \fIf_abstruse_maps_destroy_callback\fP(3), \fIf_abstruse_mapss_delete_callback\fP(3), \fIf_abstruse_mapss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_maps_delete_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_maps_delete_callback.3
new file mode 100644 (file)
index 0000000..f75ab93
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_abstruse_maps_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_maps_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map.h>
+.sp
+\fBf_status_t f_abstruse_maps_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_abstruse_maps_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+a_unsigneds
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap.h\fP(3), \fIf_abstruse_map_delete\fP(3), \fIf_abstruse_map_destroy\fP(3), \fIf_abstruse_maps_delete_callback\fP(3), \fIf_abstruse_maps_destroy_callback\fP(3), \fIf_abstruse_mapss_delete_callback\fP(3), \fIf_abstruse_mapss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_maps_destroy_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_maps_destroy_callback.3
new file mode 100644 (file)
index 0000000..697401c
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_abstruse_maps_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_maps_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map.h>
+.sp
+\fBf_status_t f_abstruse_maps_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_abstruse_maps_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+a_unsigneds
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap.h\fP(3), \fIf_abstruse_map_delete\fP(3), \fIf_abstruse_map_destroy\fP(3), \fIf_abstruse_maps_delete_callback\fP(3), \fIf_abstruse_maps_destroy_callback\fP(3), \fIf_abstruse_mapss_delete_callback\fP(3), \fIf_abstruse_mapss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_mapss_delete_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_mapss_delete_callback.3
new file mode 100644 (file)
index 0000000..cf2c508
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_abstruse_mapss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_mapss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map.h>
+.sp
+\fBf_status_t f_abstruse_mapss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_abstruse_mapss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+a_unsigneds
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap.h\fP(3), \fIf_abstruse_map_delete\fP(3), \fIf_abstruse_map_destroy\fP(3), \fIf_abstruse_maps_delete_callback\fP(3), \fIf_abstruse_maps_destroy_callback\fP(3), \fIf_abstruse_mapss_delete_callback\fP(3), \fIf_abstruse_mapss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_mapss_destroy_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruse_mapss_destroy_callback.3
new file mode 100644 (file)
index 0000000..e731756
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_abstruse_mapss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruse_mapss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map.h>
+.sp
+\fBf_status_t f_abstruse_mapss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_abstruse_mapss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+a_unsigneds
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap.h\fP(3), \fIf_abstruse_map_delete\fP(3), \fIf_abstruse_map_destroy\fP(3), \fIf_abstruse_maps_delete_callback\fP(3), \fIf_abstruse_maps_destroy_callback\fP(3), \fIf_abstruse_mapss_delete_callback\fP(3), \fIf_abstruse_mapss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruses_delete_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruses_delete_callback.3
new file mode 100644 (file)
index 0000000..6c141b6
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_abstruses_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruses_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <abstruse.h>
+.sp
+\fBf_status_t f_abstruses_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_abstruses_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIabstruse.h\fP(3), \fIf_abstruse_delete\fP(3), \fIf_abstruse_destroy\fP(3), \fIf_abstruses_delete_callback\fP(3), \fIf_abstruses_destroy_callback\fP(3), \fIf_abstrusess_delete_callback\fP(3), \fIf_abstrusess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstruses_destroy_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstruses_destroy_callback.3
new file mode 100644 (file)
index 0000000..a3f25b7
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_abstruses_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstruses_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <abstruse.h>
+.sp
+\fBf_status_t f_abstruses_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_abstruses_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success, including when nothing done due to no match against the type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIabstruse.h\fP(3), \fIf_abstruse_delete\fP(3), \fIf_abstruse_destroy\fP(3), \fIf_abstruses_delete_callback\fP(3), \fIf_abstruses_destroy_callback\fP(3), \fIf_abstrusess_delete_callback\fP(3), \fIf_abstrusess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstrusess_delete_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstrusess_delete_callback.3
new file mode 100644 (file)
index 0000000..5526b61
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_abstrusess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstrusess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <abstruse.h>
+.sp
+\fBf_status_t f_abstrusess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_abstrusess_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIabstruse.h\fP(3), \fIf_abstruse_delete\fP(3), \fIf_abstruse_destroy\fP(3), \fIf_abstruses_delete_callback\fP(3), \fIf_abstruses_destroy_callback\fP(3), \fIf_abstrusess_delete_callback\fP(3), \fIf_abstrusess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_abstruse/data/documentation/man/man3/f_abstrusess_destroy_callback.3 b/level_0/f_abstruse/data/documentation/man/man3/f_abstrusess_destroy_callback.3
new file mode 100644 (file)
index 0000000..32b25f9
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_abstrusess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_abstrusess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <abstruse.h>
+.sp
+\fBf_status_t f_abstrusess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_abstrusess_t structure.
+.PP
+a_unsigneds
+.PP
+For all other types, the caller must handle de-allocation to avoid memory leaks. Provide and use a custom callback if special handling of deallocation is needed.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIabstruse.h\fP(3), \fIf_abstruse_delete\fP(3), \fIf_abstruse_destroy\fP(3), \fIf_abstruses_delete_callback\fP(3), \fIf_abstruses_destroy_callback\fP(3), \fIf_abstrusess_delete_callback\fP(3), \fIf_abstrusess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_by_id.3 b/level_0/f_account/data/documentation/man/man3/f_account_by_id.3
new file mode 100644 (file)
index 0000000..caaf00a
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_account_by_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_by_id \-
+.SH SYNOPSIS
+.nf
+.B #include <account.h>
+.sp
+\fBf_status_t f_account_by_id\fP(
+    \fBconst f_uid_t      \fP\fIid\fP,
+    \fBf_account_t *const \fP\fIaccount\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the user account by the user id.
+.PP
+Must not be NULL.
+.PP
+F_buffer_too_small (with error bit) if the buffer is too small to store the account data. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B id
+The id of the user.
+
+.TP
+.B account
+This is replaced with by the account information. All strings will be NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a complete standard password account structure.
+.PP
+shell: The user's shell program.
+.sp
+.RS
+.nf
+\fB
+struct f_account_t {
+  f_uid_t            \fIid_user\fP;
+  f_gid_t            \fIid_group\fP;
+  f_string_dynamic_t \fIhome\fP;
+  f_string_dynamic_t \fIlabel\fP;
+  f_string_dynamic_t \fIname\fP;
+  f_string_dynamic_t \fIpassword\fP;
+  f_string_dynamic_t \fIshell\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccount.h\fP(3), \fIf_account_by_id\fP(3), \fIf_account_by_name\fP(3), \fIf_account_group_id_by_name\fP(3), \fIf_account_group_name_by_id\fP(3), \fIf_account_id_by_name\fP(3), \fIf_account_name_by_id\fP(3), \fIf_memory_array_increase_by()\fP, \fIgetpwuid_r()\fP, \fIsysconf()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_by_name.3 b/level_0/f_account/data/documentation/man/man3/f_account_by_name.3
new file mode 100644 (file)
index 0000000..bfbec3b
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_account_by_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_by_name \-
+.SH SYNOPSIS
+.nf
+.B #include <account.h>
+.sp
+\fBf_status_t f_account_by_name\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBf_account_t *const      \fP\fIaccount\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the user account by the user name.
+.PP
+Must not be NULL.
+.PP
+F_buffer_too_small (with error bit) if the buffer is too small to store the account data. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B name
+The user name. The name must be NULL terminated.
+
+.TP
+.B account
+This is replaced with by the account information. All strings will be NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Provide a complete standard password account structure.
+.PP
+shell: The user's shell program.
+.sp
+.RS
+.nf
+\fB
+struct f_account_t {
+  f_uid_t            \fIid_user\fP;
+  f_gid_t            \fIid_group\fP;
+  f_string_dynamic_t \fIhome\fP;
+  f_string_dynamic_t \fIlabel\fP;
+  f_string_dynamic_t \fIname\fP;
+  f_string_dynamic_t \fIpassword\fP;
+  f_string_dynamic_t \fIshell\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccount.h\fP(3), \fIf_account_by_id\fP(3), \fIf_account_by_name\fP(3), \fIf_account_group_id_by_name\fP(3), \fIf_account_group_name_by_id\fP(3), \fIf_account_id_by_name\fP(3), \fIf_account_name_by_id\fP(3), \fIf_memory_array_increase_by()\fP, \fIgetpwnam_r()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_delete.3 b/level_0/f_account/data/documentation/man/man3/f_account_delete.3
new file mode 100644 (file)
index 0000000..c8c8616
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_account_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <accounts.h>
+.sp
+\fBf_status_t f_account_delete\fP(
+    \fBf_account_t *const \fP\fIaccount\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the account.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B account
+The account to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a complete standard password account structure.
+.PP
+shell: The user's shell program.
+.sp
+.RS
+.nf
+\fB
+struct f_account_t {
+  f_uid_t            \fIid_user\fP;
+  f_gid_t            \fIid_group\fP;
+  f_string_dynamic_t \fIhome\fP;
+  f_string_dynamic_t \fIlabel\fP;
+  f_string_dynamic_t \fIname\fP;
+  f_string_dynamic_t \fIpassword\fP;
+  f_string_dynamic_t \fIshell\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccounts.h\fP(3), \fIf_account_delete\fP(3), \fIf_account_destroy\fP(3), \fIf_accounts_delete_callback\fP(3), \fIf_accounts_destroy_callback\fP(3), \fIf_accountss_delete_callback\fP(3), \fIf_accountss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_destroy.3 b/level_0/f_account/data/documentation/man/man3/f_account_destroy.3
new file mode 100644 (file)
index 0000000..ae1ef60
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_account_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <accounts.h>
+.sp
+\fBf_status_t f_account_destroy\fP(
+    \fBf_account_t *const \fP\fIaccount\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy the account.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B account
+The account to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a complete standard password account structure.
+.PP
+shell: The user's shell program.
+.sp
+.RS
+.nf
+\fB
+struct f_account_t {
+  f_uid_t            \fIid_user\fP;
+  f_gid_t            \fIid_group\fP;
+  f_string_dynamic_t \fIhome\fP;
+  f_string_dynamic_t \fIlabel\fP;
+  f_string_dynamic_t \fIname\fP;
+  f_string_dynamic_t \fIpassword\fP;
+  f_string_dynamic_t \fIshell\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccounts.h\fP(3), \fIf_account_delete\fP(3), \fIf_account_destroy\fP(3), \fIf_accounts_delete_callback\fP(3), \fIf_accounts_destroy_callback\fP(3), \fIf_accountss_delete_callback\fP(3), \fIf_accountss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_group_id_by_name.3 b/level_0/f_account/data/documentation/man/man3/f_account_group_id_by_name.3
new file mode 100644 (file)
index 0000000..ca00270
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_account_group_id_by_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_group_id_by_name \-
+.SH SYNOPSIS
+.nf
+.B #include <account.h>
+.sp
+\fBf_status_t f_account_group_id_by_name\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBf_gid_t *const          \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the account group id by the group name.
+.PP
+If NULL, then then this doesn't return the ID. This is useful for determining the validity of an ID without actually caring about the value itself.
+.PP
+F_buffer_too_small (with error bit) if the buffer is too small to store the account data. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The group name. The name must be NULL terminated.
+
+.TP
+.B id
+The id associated with the given name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccount.h\fP(3), \fIf_account_by_id\fP(3), \fIf_account_by_name\fP(3), \fIf_account_group_id_by_name\fP(3), \fIf_account_group_name_by_id\fP(3), \fIf_account_id_by_name\fP(3), \fIf_account_name_by_id\fP(3), \fIgetgrnam_r()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_group_name_by_id.3 b/level_0/f_account/data/documentation/man/man3/f_account_group_name_by_id.3
new file mode 100644 (file)
index 0000000..2f03ba5
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_account_group_name_by_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_group_name_by_id \-
+.SH SYNOPSIS
+.nf
+.B #include <account.h>
+.sp
+\fBf_status_t f_account_group_name_by_id\fP(
+    \fBconst f_gid_t             \fP\fIid\fP,
+    \fBf_string_dynamic_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the account group name by the group id.
+.PP
+If NULL, then then this doesn't return the name. This is useful for determining the validity of an ID without actually caring about the value itself.
+.PP
+F_buffer_too_small (with error bit) if the buffer is too small to store the account data. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B id
+The id of the group.
+
+.TP
+.B name
+This is replaced with by the group name. The name will be NULL terminated after the name.used.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccount.h\fP(3), \fIf_account_by_id\fP(3), \fIf_account_by_name\fP(3), \fIf_account_group_id_by_name\fP(3), \fIf_account_group_name_by_id\fP(3), \fIf_account_id_by_name\fP(3), \fIf_account_name_by_id\fP(3), \fIf_memory_array_increase_by()\fP, \fIgetgrgid_r()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_id_by_name.3 b/level_0/f_account/data/documentation/man/man3/f_account_id_by_name.3
new file mode 100644 (file)
index 0000000..3f454bf
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_account_id_by_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_id_by_name \-
+.SH SYNOPSIS
+.nf
+.B #include <account.h>
+.sp
+\fBf_status_t f_account_id_by_name\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBf_uid_t *const          \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the user account id by the user name.
+.PP
+If NULL, then then this doesn't return the ID. This is useful for determining the validity of an ID without actually caring about the value itself.
+.PP
+F_buffer_too_small (with error bit) if the buffer is too small to store the account data. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The user name. The name must be NULL terminated.
+
+.TP
+.B id
+The id associated with the given name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccount.h\fP(3), \fIf_account_by_id\fP(3), \fIf_account_by_name\fP(3), \fIf_account_group_id_by_name\fP(3), \fIf_account_group_name_by_id\fP(3), \fIf_account_id_by_name\fP(3), \fIf_account_name_by_id\fP(3), \fIgetpwnam_r()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_account_name_by_id.3 b/level_0/f_account/data/documentation/man/man3/f_account_name_by_id.3
new file mode 100644 (file)
index 0000000..e8013c4
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_account_name_by_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_account_name_by_id \-
+.SH SYNOPSIS
+.nf
+.B #include <account.h>
+.sp
+\fBf_status_t f_account_name_by_id\fP(
+    \fBconst f_uid_t             \fP\fIid\fP,
+    \fBf_string_dynamic_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the user account name by the user id.
+.PP
+If NULL, then then this doesn't return the name. This is useful for determining the validity of an ID without actually caring about the value itself.
+.PP
+F_buffer_too_small (with error bit) if the buffer is too small to store the account data. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B id
+The id of the user.
+
+.TP
+.B name
+This is replaced with by the user name. The name will be NULL terminated after the name.used.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccount.h\fP(3), \fIf_account_by_id\fP(3), \fIf_account_by_name\fP(3), \fIf_account_group_id_by_name\fP(3), \fIf_account_group_name_by_id\fP(3), \fIf_account_id_by_name\fP(3), \fIf_account_name_by_id\fP(3), \fIf_memory_array_increase_by()\fP, \fIgetpwuid_r()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_accounts_delete_callback.3 b/level_0/f_account/data/documentation/man/man3/f_accounts_delete_callback.3
new file mode 100644 (file)
index 0000000..e6cc3d5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_accounts_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_accounts_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <accounts.h>
+.sp
+\fBf_status_t f_accounts_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_accounts_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccounts.h\fP(3), \fIf_account_delete\fP(3), \fIf_account_destroy\fP(3), \fIf_accounts_delete_callback\fP(3), \fIf_accounts_destroy_callback\fP(3), \fIf_accountss_delete_callback\fP(3), \fIf_accountss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_accounts_destroy_callback.3 b/level_0/f_account/data/documentation/man/man3/f_accounts_destroy_callback.3
new file mode 100644 (file)
index 0000000..9ae1c16
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_accounts_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_accounts_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <accounts.h>
+.sp
+\fBf_status_t f_accounts_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_accounts_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccounts.h\fP(3), \fIf_account_delete\fP(3), \fIf_account_destroy\fP(3), \fIf_accounts_delete_callback\fP(3), \fIf_accounts_destroy_callback\fP(3), \fIf_accountss_delete_callback\fP(3), \fIf_accountss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_accountss_delete_callback.3 b/level_0/f_account/data/documentation/man/man3/f_accountss_delete_callback.3
new file mode 100644 (file)
index 0000000..15c61f4
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_accountss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_accountss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <accounts.h>
+.sp
+\fBf_status_t f_accountss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_accountss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccounts.h\fP(3), \fIf_account_delete\fP(3), \fIf_account_destroy\fP(3), \fIf_accounts_delete_callback\fP(3), \fIf_accounts_destroy_callback\fP(3), \fIf_accountss_delete_callback\fP(3), \fIf_accountss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_account/data/documentation/man/man3/f_accountss_destroy_callback.3 b/level_0/f_account/data/documentation/man/man3/f_accountss_destroy_callback.3
new file mode 100644 (file)
index 0000000..7686b1b
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_accountss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_accountss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <accounts.h>
+.sp
+\fBf_status_t f_accountss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_accountss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaccounts.h\fP(3), \fIf_account_delete\fP(3), \fIf_account_destroy\fP(3), \fIf_accounts_delete_callback\fP(3), \fIf_accounts_destroy_callback\fP(3), \fIf_accountss_delete_callback\fP(3), \fIf_accountss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_ambient_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_ambient_get.3
new file mode 100644 (file)
index 0000000..41e41a9
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_ambient_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_ambient_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_ambient_get\fP(
+    \fBconst f_capability_value_t \fP\fIvalue\fP,
+    \fBint *const                 \fP\fIambient\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the ambient capability.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the system does not support ambient capabilities.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B value
+The capability value.
+
+.TP
+.B ambient
+The retrieved ambient value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_ambient()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_ambient_reset.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_ambient_reset.3
new file mode 100644 (file)
index 0000000..bcc6fe8
--- /dev/null
@@ -0,0 +1,33 @@
+.TH f_capability_ambient_reset "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_ambient_reset \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_ambient_reset\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset the ambient capability.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_reset_ambient()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_ambient_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_ambient_set.3
new file mode 100644 (file)
index 0000000..3c35391
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_ambient_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_ambient_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_ambient_set\fP(
+    \fBconst f_capability_value_t      \fP\fIvalue\fP,
+    \fBconst f_capability_flag_value_t \fP\fIvalue_flag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the ambient capability.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B value
+The capability value.
+
+.TP
+.B value_flag
+The capability flag value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_ambient()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_clear.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_clear.3
new file mode 100644 (file)
index 0000000..1ff4046
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_clear "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_clear \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_clear\fP(
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Clear the capability structure.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability
+The capability to clear.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_clear()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_clear_flag.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_clear_flag.3
new file mode 100644 (file)
index 0000000..89380f7
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_clear_flag "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_clear_flag \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_clear_flag\fP(
+    \fBconst f_capability_flag_t \fP\fIflag\fP,
+    \fBf_capability_t *const     \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Clear the capability flag.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B flag
+The flag to clear.
+
+.TP
+.B capability
+The capability to clear the flag of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_clear_flag()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_compare.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_compare.3
new file mode 100644 (file)
index 0000000..c259101
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_capability_compare "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_compare \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_compare\fP(
+    \fBconst f_capability_t \fP\fIcapability1\fP,
+    \fBconst f_capability_t \fP\fIcapability2\fP,
+    \fBint *const           \fP\fIflags\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two capability structures.
+.PP
+Set to NULL to not use.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability1
+The first capability to compare.
+
+.TP
+.B capability2
+The second capability to compare.
+
+.TP
+.B flags
+(optional) This represents which of the flags that differ on miss.
+
+.SH RETURN VALUE
+.PP
+F_equal_to on match. F_equal_to_not on miss.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_compare()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_copy.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_copy.3
new file mode 100644 (file)
index 0000000..88aa5fe
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_copy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_copy\fP(
+    \fBconst f_capability_t  \fP\fIsource\fP,
+    \fBf_capability_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy the capability structure.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B source
+The capability to copy from.
+
+.TP
+.B destination
+The capability to copy to. This must be freed via f_capability_delete() when finished with.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_dup()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_copy_external.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_copy_external.3
new file mode 100644 (file)
index 0000000..f101c0b
--- /dev/null
@@ -0,0 +1,55 @@
+.TH f_capability_copy_external "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_copy_external \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_copy_external\fP(
+    \fBconst f_capability_t \fP\fIcapability\fP,
+    \fBconst ssize_t        \fP\fImax\fP,
+    \fBvoid *const          \fP\fIexternal\fP,
+    \fBssize_t *const       \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy an internally represented capability into an externally represented capability.
+.PP
+Set to NULL to not use.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid. F_range_not (with error bit) on out of range when processing (external) capability.
+.PP
+F_failure (with error bit) on failure to get size.
+.SH PARAMETERS
+.TP
+.B capability
+The (internal) capability the (external) capability is copied from.
+
+.TP
+.B max
+The the maximum buffer length (in bytes) allowed in the (external) capability. Use f_capability_size() to determine the maximum size required to hold capability.
+
+.TP
+.B external
+The (external) capability the (internal) capability is copied to.
+
+.TP
+.B size
+(optional) The size (in bytes) copied into the (external) capability.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_copy_ext()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_copy_internal.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_copy_internal.3
new file mode 100644 (file)
index 0000000..4bf7372
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_copy_internal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_copy_internal \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_copy_internal\fP(
+    \fBconst void *const     \fP\fIexternal\fP,
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy an externally represented capability into an internally represented capability.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid. F_range_not (with error bit) on out of range when processing (external) capability.
+.PP
+F_failure (with error bit) on failure to get size.
+.SH PARAMETERS
+.TP
+.B external
+A pointer to user allocated memory representing the (external) capability. This must have been popilated by cap_copy_ext() or f_capability_copy_external().
+
+.TP
+.B capability
+The (internal) capability the (external) capability is copied into. This must be freed via f_capability_delete() when finished with.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_copy_int()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_delete.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_delete.3
new file mode 100644 (file)
index 0000000..e10ce32
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_delete\fP(
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Free the capability structure.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory (which doesn't make sense here but man page includes this). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability
+The capability to delete. Pointer address is set to 0 on success.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_free()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_file_descriptor_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_file_descriptor_get.3
new file mode 100644 (file)
index 0000000..adc94c8
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_file_descriptor_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_file_descriptor_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_file_descriptor_get\fP(
+    \fBconst int             \fP\fIdescriptor\fP,
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the capability of a file represented by a file descriptor.
+.PP
+F_access_denied (with error bit) on access denied. F_descriptor_not (with error bit) if the file descriptor is invalid. F_directory_not (with error bit) if a directory containing the file does not exist. F_file_found_not (with error bit) if file was not found. F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_name_not (with error bit) if the file name is too long. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation. F_support_not (with error bit) if the file system does not support this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B descriptor
+The file descriptor.
+
+.TP
+.B capability
+The retrieved capability. This must be freed via f_capability_delete() when finished with.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_fd()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_file_descriptor_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_file_descriptor_set.3
new file mode 100644 (file)
index 0000000..675ce48
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_file_descriptor_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_file_descriptor_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_file_descriptor_set\fP(
+    \fBconst int            \fP\fIdescriptor\fP,
+    \fBconst f_capability_t \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the capability of a file represented by a file descriptor.
+.PP
+F_access_denied (with error bit) on access denied. F_descriptor_not (with error bit) if the file descriptor is invalid. F_directory_not (with error bit) if a directory containing the file does not exist. F_file_found_not (with error bit) if file was not found. F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_name_not (with error bit) if the file name is too long. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation. F_support_not (with error bit) if the file system does not support this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B descriptor
+The file descriptor.
+
+.TP
+.B capability
+The capability to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_fd()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_file_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_file_get.3
new file mode 100644 (file)
index 0000000..3229397
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_capability_file_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_file_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_file_get\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBf_capability_t *const   \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the capability of a file represented by a file path.
+.PP
+F_access_denied (with error bit) on access denied. F_descriptor_not (with error bit) if the file descriptor is invalid. F_directory_not (with error bit) if a directory containing the file does not exist. F_file_found_not (with error bit) if file was not found. F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_name_not (with error bit) if the file name is too long. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation. F_support_not (with error bit) if the file system does not support this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path.
+
+.TP
+.B capability
+The retrieved capability. This must be freed via f_capability_delete() when finished with.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_file()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_file_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_file_set.3
new file mode 100644 (file)
index 0000000..704fd55
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_capability_file_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_file_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_file_set\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_capability_t    \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the capability of a file represented by a file path.
+.PP
+F_access_denied (with error bit) on access denied. F_descriptor_not (with error bit) if the file descriptor is invalid. F_directory_not (with error bit) if a directory containing the file does not exist. F_file_found_not (with error bit) if file was not found. F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_name_not (with error bit) if the file name is too long. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation. F_support_not (with error bit) if the file system does not support this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path.
+
+.TP
+.B capability
+The capability to set.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_file()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_flag_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_flag_get.3
new file mode 100644 (file)
index 0000000..b558ca4
--- /dev/null
@@ -0,0 +1,53 @@
+.TH f_capability_flag_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_flag_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_flag_get\fP(
+    \fBconst f_capability_t             \fP\fIcapability\fP,
+    \fBconst f_capability_value_t       \fP\fIcode\fP,
+    \fBconst f_capability_flag_t        \fP\fIflag\fP,
+    \fBf_capability_flag_value_t *const \fP\fIenabled\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the value of a flag from the capability structure.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability
+The capability to get the code of.
+
+.TP
+.B code
+The capability code to get the flag of.
+
+.TP
+.B flag
+The flag of the capability code to get the value of.
+
+.TP
+.B enabled
+The determined capability code flag value. This is TRUE when the flag is enabled and FALSE otherwise.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_flag()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_flag_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_flag_set.3
new file mode 100644 (file)
index 0000000..8500229
--- /dev/null
@@ -0,0 +1,75 @@
+.TH f_capability_flag_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_flag_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_flag_set\fP(
+    \fBconst f_capability_flag_t       \fP\fIflag\fP,
+    \fBconst f_capability_flag_value_t \fP\fIenabled\fP,
+    \fBconst f_int32s_t                \fP\fIcodes\fP,
+    \fBf_capability_t *const           \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the value of a flags from the capability structure.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B flag
+The flag of the capability code to set the value of.
+
+.TP
+.B enabled
+The capability code flag value to set. This is TRUE when the flag is enabled and FALSE otherwise.
+
+.TP
+.B codes
+An array of codes to set the capability flag value of.
+
+.TP
+.B capability
+The capability to set the flag of.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array int32_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_int32s_t {
+  int32_t            *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_flag()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_from_name.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_from_name.3
new file mode 100644 (file)
index 0000000..d0a7451
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_capability_from_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_from_name \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_from_name\fP(
+    \fBconst f_string_static_t     \fP\fIname\fP,
+    \fBf_capability_value_t *const \fP\fIcode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the capability code from the capability name.
+.PP
+Set to NULL to not use.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The name of the capability (must be all lower case).
+
+.TP
+.B code
+(optional) The determined code.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_from_name()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_from_text.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_from_text.3
new file mode 100644 (file)
index 0000000..8c2f4e0
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_capability_from_text "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_from_text \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_from_text\fP(
+    \fBconst f_string_static_t \fP\fItext\fP,
+    \fBf_capability_t *const   \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the capability represented by the given string.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B text
+The human-readable string representing the capabilities (such as "cap_chown+ep"). This must be a NULL terminated string.
+
+.TP
+.B capability
+The determined capabilities. This must be freed via f_capability_delete().
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_from_text()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_groups_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_groups_set.3
new file mode 100644 (file)
index 0000000..341deb7
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_capability_groups_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_groups_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_groups_set\fP(
+    \fBconst f_gid_t \fP\fIid_group\fP,
+    \fBconst size_t  \fP\fItotal\fP,
+    \fBconst f_gid_t \fP\fIid_groups\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the group IDs.
+.PP
+This is the same as setuid(), except: 1) Helps ensure the correct effective capability is used to perform the operation. 2) All "effective" capabilities are lowered after this call.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id_group
+The group ID (as in setgid()).
+
+.TP
+.B total
+The total number of groups in id_groups.
+
+.TP
+.B id_groups
+The array of supplementary group IDs (as in setgroups()).
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_setgroups()\fP, \fIsetgid()\fP, \fIsetgroups()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_initialize.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_initialize.3
new file mode 100644 (file)
index 0000000..32e6e03
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_initialize "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_initialize \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_initialize\fP(
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Initialize the capability structure.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on failure to initialize.
+.SH PARAMETERS
+.TP
+.B capability
+The capability to initialize. This must be freed via f_capability_delete() when finished with.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_mode_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_mode_get.3
new file mode 100644 (file)
index 0000000..a0fd04e
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_mode_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_mode_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_mode_get\fP(
+    \fBf_capability_mode_t *const \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mode for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mode
+The capability mode.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_mode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_mode_get_name.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_mode_get_name.3
new file mode 100644 (file)
index 0000000..bb42f1c
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_mode_get_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_mode_get_name \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_mode_get_name\fP(
+    \fBconst f_capability_mode_t  \fP\fImode\fP,
+    \fBf_string_constant_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the name of the mode.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mode
+The capability mode.
+
+.TP
+.B name
+The name of the mode. This is a NULL terminated string.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_mode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_mode_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_mode_set.3
new file mode 100644 (file)
index 0000000..a931e41
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_mode_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_mode_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_mode_set\fP(
+    \fBconst f_capability_mode_t \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the mode for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mode
+The capability mode.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_mode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_owner_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_owner_get.3
new file mode 100644 (file)
index 0000000..42162ae
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_owner_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_owner_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_owner_get\fP(
+    \fBconst f_capability_t \fP\fIcapability\fP,
+    \fBf_uid_t *const       \fP\fIid_user\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the namespace owner for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability
+The capability.
+
+.TP
+.B id_user
+The ID of the user.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_owner()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_owner_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_owner_set.3
new file mode 100644 (file)
index 0000000..951ff21
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_capability_owner_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_owner_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_owner_set\fP(
+    \fBconst f_capability_t \fP\fIcapability\fP,
+    \fBconst f_uid_t        \fP\fIid_user\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the namespace owner for the current process.
+.PP
+F_access_denied (with error bit) on access denied. F_descriptor_not (with error bit) if the file descriptor is invalid. F_directory_not (with error bit) if a directory containing the file does not exist. F_file_found_not (with error bit) if file was not found. F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_name_not (with error bit) if the file name is too long. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation. F_support_not (with error bit) if the file system does not support this operation.
+.PP
+F_failure (with error bit) on any other error.
+.PP
+Note: the return codes may not make sense. the documentation for cap_set_owner() designates them as the return codes. however, it is suspected that this is not the case. For consistency with the documentation, return the codes anyway.
+.SH PARAMETERS
+.TP
+.B capability
+The capability.
+
+.TP
+.B id_user
+The ID of the user.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_owner()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_process_bound_drop.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_process_bound_drop.3
new file mode 100644 (file)
index 0000000..19994fc
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_capability_process_bound_drop "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_process_bound_drop \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_process_bound_drop\fP(
+    \fBf_capability_value_t \fP\fIvalue\fP,
+    \fBint *const           \fP\fIbound\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Drop the bound for the process.
+.PP
+This will lower the specified bounding set capability if appropriate permission exist (the prevailing effective capability set must have a raised CAP_SETPCAP).
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B value
+The capability code to get the bound for.
+
+.TP
+.B bound
+The determined bound value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_drop_bound()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_process_bound_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_process_bound_get.3
new file mode 100644 (file)
index 0000000..3516c3a
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_process_bound_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_process_bound_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_process_bound_get\fP(
+    \fBf_capability_value_t \fP\fIvalue\fP,
+    \fBint *const           \fP\fIbound\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the bound for the process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_known_not (with error bit) if the code is unknown to the current system. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B value
+The capability code to get the bound for.
+
+.TP
+.B bound
+The determined bound value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_bound()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_process_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_process_get.3
new file mode 100644 (file)
index 0000000..74e25fe
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_process_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_process_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_process_get\fP(
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the capability for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability
+The determined capability. This must be freed via f_capability_delete() when finished with.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_proc()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_process_get_by_id.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_process_get_by_id.3
new file mode 100644 (file)
index 0000000..c78b1a9
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_process_get_by_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_process_get_by_id \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_process_get_by_id\fP(
+    \fBconst pid_t           \fP\fIid\fP,
+    \fBf_capability_t *const \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the capability for the process represented by the given PID.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID (pid) to get capabilities of. If set to 0, then get the capabilities of the calling process (similar to f_capability_process_get()).
+
+.TP
+.B capability
+The determined capability. This must be freed via f_capability_delete() when finished with.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_pid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_process_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_process_set.3
new file mode 100644 (file)
index 0000000..3880a5a
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_process_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_process_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_process_set\fP(
+    \fBconst f_capability_t \fP\fIcapability\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the capability for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B capability
+The capability to assign.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_proc()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_security_bits_get.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_security_bits_get.3
new file mode 100644 (file)
index 0000000..7ab5cf3
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_security_bits_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_security_bits_get \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_security_bits_get\fP(
+    \fBf_capability_bits_t *const \fP\fIbits\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the security bits for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B bits
+The security bits.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_get_secbits()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_security_bits_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_security_bits_set.3
new file mode 100644 (file)
index 0000000..2a448d1
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_capability_security_bits_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_security_bits_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_security_bits_set\fP(
+    \fBconst f_capability_bits_t \fP\fIbits\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the security bits for the current process.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B bits
+The security bits.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_set_secbits()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_size.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_size.3
new file mode 100644 (file)
index 0000000..872049c
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_capability_size "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_size \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_size\fP(
+    \fBconst f_capability_t \fP\fIcapability\fP,
+    \fBssize_t *const       \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the total length (in bytes) the capability would take up when converted to external representation.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_parameter (with error bit) if a parameter is invalid. F_range_not (with error bit) on out of range when processing size.
+.PP
+F_failure (with error bit) on failure to get size.
+.SH PARAMETERS
+.TP
+.B capability
+The capability to get size of.
+
+.TP
+.B size
+The size of the external representation of capability. Size may be set to -1 on error.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_size()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_supported.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_supported.3
new file mode 100644 (file)
index 0000000..a4c66a2
--- /dev/null
@@ -0,0 +1,29 @@
+.TH f_capability_supported "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_supported \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBuint8_t f_capability_supported\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check if capabilities are supported.
+.SH RETURN VALUE
+.PP
+F_true if supported. F_false otherwise.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_supported_ambient.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_supported_ambient.3
new file mode 100644 (file)
index 0000000..8f8e6ba
--- /dev/null
@@ -0,0 +1,29 @@
+.TH f_capability_supported_ambient "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_supported_ambient \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBuint8_t f_capability_supported_ambient\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check if capabilities support ambient, using special libcap function/macro.
+.SH RETURN VALUE
+.PP
+F_true if ambient is supported. F_false otherwise.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fICAP_AMBIENT_SUPPORTED()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_supported_code.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_supported_code.3
new file mode 100644 (file)
index 0000000..504ab3b
--- /dev/null
@@ -0,0 +1,34 @@
+.TH f_capability_supported_code "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_supported_code \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBuint8_t f_capability_supported_code\fP(
+    \fBf_capability_value_t \fP\fIcode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check if the capabilitiy code is supported, using special libcap function/macro.
+.SH PARAMETERS
+.TP
+.B code
+The capability code.
+
+.SH RETURN VALUE
+.PP
+F_true if the code is supported. F_false otherwise.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fICAP_IS_SUPPORTED()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_to_name.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_to_name.3
new file mode 100644 (file)
index 0000000..68c4034
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_capability_to_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_to_name \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_to_name\fP(
+    \fBconst f_capability_value_t \fP\fIcode\fP,
+    \fBf_string_dynamic_t *const  \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the capability code to a name (string).
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if appended string length is too large to store in the buffer.
+.PP
+F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B code
+The capability code.
+
+.TP
+.B name
+The determined name. The name is appended into this variable. This is NULL terminated after the name.used.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIf_memory_array_resize()\fP, \fIcap_free()\fP, \fIcap_to_name()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_to_text.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_to_text.3
new file mode 100644 (file)
index 0000000..33ff6db
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_capability_to_text "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_to_text \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_to_text\fP(
+    \fBconst f_capability_t      \fP\fIcapability\fP,
+    \fBf_string_dynamic_t *const \fP\fItext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the capability to a human-readable string.
+.PP
+This will append the string to text.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if appended string length is too large to store in the buffer.
+.PP
+F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B capability
+The capability code.
+
+.TP
+.B text
+The determined human-readable string. This is NULL terminated after the text.used.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIf_memory_array_resize()\fP, \fIcap_free()\fP, \fIcap_to_text()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_capability/data/documentation/man/man3/f_capability_user_set.3 b/level_0/f_capability/data/documentation/man/man3/f_capability_user_set.3
new file mode 100644 (file)
index 0000000..524ad48
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_capability_user_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_capability_user_set \-
+.SH SYNOPSIS
+.nf
+.B #include <capability.h>
+.sp
+\fBf_status_t f_capability_user_set\fP(
+    \fBconst f_uid_t \fP\fIid_user\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the user ID.
+.PP
+This is the same as setuid(), except: 1) Helps ensure the correct effective capability is used to perform the operation. 2) Preserves availability of permitted capabilities after the user ID changes. 3) All "effective" capabilities are lowered after this call.
+.PP
+F_implement_not (with error bit) if this function is not available (due to not having libcap support compiled in). F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id_user
+The ID of the user.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcapability.h\fP(3), \fIf_capability_ambient_get\fP(3), \fIf_capability_ambient_reset\fP(3), \fIf_capability_ambient_set\fP(3), \fIf_capability_clear\fP(3), \fIf_capability_clear_flag\fP(3), \fIf_capability_compare\fP(3), \fIf_capability_copy\fP(3), \fIf_capability_copy_external\fP(3), \fIf_capability_copy_internal\fP(3), \fIf_capability_delete\fP(3), \fIf_capability_file_descriptor_get\fP(3), \fIf_capability_file_descriptor_set\fP(3), \fIf_capability_file_get\fP(3), \fIf_capability_file_set\fP(3), \fIf_capability_flag_get\fP(3), \fIf_capability_flag_set\fP(3), \fIf_capability_from_name\fP(3), \fIf_capability_from_text\fP(3), \fIf_capability_groups_set\fP(3), \fIf_capability_initialize\fP(3), \fIf_capability_mode_get\fP(3), \fIf_capability_mode_get_name\fP(3), \fIf_capability_mode_set\fP(3), \fIf_capability_owner_get\fP(3), \fIf_capability_owner_set\fP(3), \fIf_capability_process_bound_drop\fP(3), \fIf_capability_process_bound_get\fP(3), \fIf_capability_process_get\fP(3), \fIf_capability_process_get_by_id\fP(3), \fIf_capability_process_set\fP(3), \fIf_capability_security_bits_get\fP(3), \fIf_capability_security_bits_set\fP(3), \fIf_capability_size\fP(3), \fIf_capability_supported\fP(3), \fIf_capability_supported_ambient\fP(3), \fIf_capability_supported_code\fP(3), \fIf_capability_to_name\fP(3), \fIf_capability_to_text\fP(3), \fIf_capability_user_set\fP(3), \fIcap_setuid()\fP, \fIsetuid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_context_delete.3 b/level_0/f_color/data/documentation/man/man3/f_color_context_delete.3
new file mode 100644 (file)
index 0000000..1279e16
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_color_context_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_context_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t f_color_context_delete\fP(
+    \fBf_color_context_t *const \fP\fIcontext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete any dynamic allocated data on the color context object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B context
+The context object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a color context structure.
+.PP
+This is intended to be used for printing, and this provides a management structure for all color context related data.
+.PP
+warning: Color context associated with "warning".
+.sp
+.RS
+.nf
+\fB
+struct f_color_context_t {
+  f_color_t             \fIlist\fP;
+  f_color_format_t      \fIformat\fP;
+  uint8_t               \fImode\fP;
+  f_color_set_context_t \fIset\fP;
+  f_string_dynamic_t    \fIerror\fP;
+  f_string_dynamic_t    \fIimportant\fP;
+  f_string_dynamic_t    \fInormal\fP;
+  f_string_dynamic_t    \fInormal_reset\fP;
+  f_string_dynamic_t    \fInotable\fP;
+  f_string_dynamic_t    \fIreset\fP;
+  f_string_dynamic_t    \fIstandout\fP;
+  f_string_dynamic_t    \fIsuccess\fP;
+  f_string_dynamic_t    \fItitle\fP;
+  f_string_dynamic_t    \fIwarning\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIf_color_context_delete\fP(3), \fIf_color_context_destroy\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_context_destroy.3 b/level_0/f_color/data/documentation/man/man3/f_color_context_destroy.3
new file mode 100644 (file)
index 0000000..80cfab5
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_color_context_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_context_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t f_color_context_destroy\fP(
+    \fBf_color_context_t *const \fP\fIcontext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy any dynamic allocated data on the color context object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B context
+The context object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a color context structure.
+.PP
+This is intended to be used for printing, and this provides a management structure for all color context related data.
+.PP
+warning: Color context associated with "warning".
+.sp
+.RS
+.nf
+\fB
+struct f_color_context_t {
+  f_color_t             \fIlist\fP;
+  f_color_format_t      \fIformat\fP;
+  uint8_t               \fImode\fP;
+  f_color_set_context_t \fIset\fP;
+  f_string_dynamic_t    \fIerror\fP;
+  f_string_dynamic_t    \fIimportant\fP;
+  f_string_dynamic_t    \fInormal\fP;
+  f_string_dynamic_t    \fInormal_reset\fP;
+  f_string_dynamic_t    \fInotable\fP;
+  f_string_dynamic_t    \fIreset\fP;
+  f_string_dynamic_t    \fIstandout\fP;
+  f_string_dynamic_t    \fIsuccess\fP;
+  f_string_dynamic_t    \fItitle\fP;
+  f_string_dynamic_t    \fIwarning\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIf_color_context_delete\fP(3), \fIf_color_context_destroy\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_load_context.3 b/level_0/f_color/data/documentation/man/man3/f_color_load_context.3
new file mode 100644 (file)
index 0000000..2449e61
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_color_load_context "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_load_context \-
+.SH SYNOPSIS
+.nf
+.B #include <color.h>
+.sp
+\fBf_status_t f_color_load_context\fP(
+    \fBconst uint8_t            \fP\fImode\fP,
+    \fBf_color_context_t *const \fP\fIcontext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the appropriate colors into the color context.
+.PP
+This will handle the difference betweem xorg terminals and linux consoles. If you wish to use non-standard colors either redefine this function or don't use it.
+.PP
+f_color_mode_light_e
+.PP
+The default/fallback behavior is f_color_xterminal.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B mode
+The color mode to load.
+
+.TP
+.B context
+The color context the load the color codes into. The context.mode is always set to the specified mode, even if it is not supported (except when there is an invalid parameter).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a color context structure.
+.PP
+This is intended to be used for printing, and this provides a management structure for all color context related data.
+.PP
+warning: Color context associated with "warning".
+.sp
+.RS
+.nf
+\fB
+struct f_color_context_t {
+  f_color_t             \fIlist\fP;
+  f_color_format_t      \fIformat\fP;
+  uint8_t               \fImode\fP;
+  f_color_set_context_t \fIset\fP;
+  f_string_dynamic_t    \fIerror\fP;
+  f_string_dynamic_t    \fIimportant\fP;
+  f_string_dynamic_t    \fInormal\fP;
+  f_string_dynamic_t    \fInormal_reset\fP;
+  f_string_dynamic_t    \fInotable\fP;
+  f_string_dynamic_t    \fIreset\fP;
+  f_string_dynamic_t    \fIstandout\fP;
+  f_string_dynamic_t    \fIsuccess\fP;
+  f_string_dynamic_t    \fItitle\fP;
+  f_string_dynamic_t    \fIwarning\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but mode is f_color_mode_none_e or not a supported mode.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcolor.h\fP(3), \fIf_color_load_context\fP(3), \fIf_color_save_1\fP(3), \fIf_color_save_2\fP(3), \fIf_color_save_3\fP(3), \fIf_color_save_4\fP(3), \fIf_color_save_5\fP(3), \fIf_memory_array_increase_by()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_save_1.3 b/level_0/f_color/data/documentation/man/man3/f_color_save_1.3
new file mode 100644 (file)
index 0000000..4818c3e
--- /dev/null
@@ -0,0 +1,95 @@
+.TH f_color_save_1 "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_save_1 \-
+.SH SYNOPSIS
+.nf
+.B #include <color.h>
+.sp
+\fBf_status_t f_color_save_1\fP(
+    \fBconst f_color_format_t    \fP\fIformat\fP,
+    \fBconst f_string_static_t   \fP\fIcolor1\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Save color information to some string using one color code.
+.PP
+This is environment sensitive. If TERM is not defined or set to "linux", then macro_f_color_t_set_linux() is used. Otherwise macro_f_color_t_set_xterminal() is used.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B format
+The color format parts.
+
+.TP
+.B color1
+A color to assign.
+
+.TP
+.B buffer
+The string to save the colors to. The buffer will become NULL terminated after the appended string length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide structure for containing color format control strings.
+.PP
+medium: String used to designate the separation between two codes in a color code sequence.
+.sp
+.RS
+.nf
+\fB
+struct f_color_format_t {
+  f_string_static_t \fIbegin\fP;
+  f_string_static_t \fIend\fP;
+  f_string_static_t \fImedium\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcolor.h\fP(3), \fIf_color_load_context\fP(3), \fIf_color_save_1\fP(3), \fIf_color_save_2\fP(3), \fIf_color_save_3\fP(3), \fIf_color_save_4\fP(3), \fIf_color_save_5\fP(3), \fImacro_f_color_t_set_linux()\fP, \fImacro_f_color_t_set_xterminal()\fP, \fIf_memory_array_increase_by()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_save_2.3 b/level_0/f_color/data/documentation/man/man3/f_color_save_2.3
new file mode 100644 (file)
index 0000000..88f91b5
--- /dev/null
@@ -0,0 +1,125 @@
+.TH f_color_save_2 "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_save_2 \-
+.SH SYNOPSIS
+.nf
+.B #include <color.h>
+.sp
+\fBf_status_t f_color_save_2\fP(
+    \fBconst f_color_format_t    \fP\fIformat\fP,
+    \fBconst f_string_static_t   \fP\fIcolor1\fP,
+    \fBconst f_string_static_t   \fP\fIcolor2\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Save color information to some string using two color codes.
+.PP
+This is environment sensitive. If TERM is not defined or set to "linux", then macro_f_color_t_set_linux() is used. Otherwise macro_f_color_t_set_xterminal() is used.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B format
+The color format parts.
+
+.TP
+.B color1
+A color to assign.
+
+.TP
+.B color2
+A second color to assign. Ignored if color1.used is 0.
+
+.TP
+.B buffer
+The string to save the colors to. The buffer will become NULL terminated after the appended string length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide structure for containing color format control strings.
+.PP
+medium: String used to designate the separation between two codes in a color code sequence.
+.sp
+.RS
+.nf
+\fB
+struct f_color_format_t {
+  f_string_static_t \fIbegin\fP;
+  f_string_static_t \fIend\fP;
+  f_string_static_t \fImedium\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcolor.h\fP(3), \fIf_color_load_context\fP(3), \fIf_color_save_1\fP(3), \fIf_color_save_2\fP(3), \fIf_color_save_3\fP(3), \fIf_color_save_4\fP(3), \fIf_color_save_5\fP(3), \fImacro_f_color_t_set_linux()\fP, \fImacro_f_color_t_set_xterminal()\fP, \fIf_memory_array_increase_by()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_save_3.3 b/level_0/f_color/data/documentation/man/man3/f_color_save_3.3
new file mode 100644 (file)
index 0000000..0a1efee
--- /dev/null
@@ -0,0 +1,155 @@
+.TH f_color_save_3 "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_save_3 \-
+.SH SYNOPSIS
+.nf
+.B #include <color.h>
+.sp
+\fBf_status_t f_color_save_3\fP(
+    \fBconst f_color_format_t    \fP\fIformat\fP,
+    \fBconst f_string_static_t   \fP\fIcolor1\fP,
+    \fBconst f_string_static_t   \fP\fIcolor2\fP,
+    \fBconst f_string_static_t   \fP\fIcolor3\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Save color information to some string using three color codes.
+.PP
+This is environment sensitive. If TERM is not defined or set to "linux", then macro_f_color_t_set_linux() is used. Otherwise macro_f_color_t_set_xterminal() is used.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B format
+The color format parts.
+
+.TP
+.B color1
+A color to assign.
+
+.TP
+.B color2
+A second color to assign. Ignored if color1.used is 0.
+
+.TP
+.B color3
+A third color to assign. Ignored if color1.used or color2.used is 0.
+
+.TP
+.B buffer
+The string to save the colors to. The buffer will become NULL terminated after the appended string length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide structure for containing color format control strings.
+.PP
+medium: String used to designate the separation between two codes in a color code sequence.
+.sp
+.RS
+.nf
+\fB
+struct f_color_format_t {
+  f_string_static_t \fIbegin\fP;
+  f_string_static_t \fIend\fP;
+  f_string_static_t \fImedium\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcolor.h\fP(3), \fIf_color_load_context\fP(3), \fIf_color_save_1\fP(3), \fIf_color_save_2\fP(3), \fIf_color_save_3\fP(3), \fIf_color_save_4\fP(3), \fIf_color_save_5\fP(3), \fImacro_f_color_t_set_linux()\fP, \fImacro_f_color_t_set_xterminal()\fP, \fIf_memory_array_increase_by()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_save_4.3 b/level_0/f_color/data/documentation/man/man3/f_color_save_4.3
new file mode 100644 (file)
index 0000000..d76b607
--- /dev/null
@@ -0,0 +1,185 @@
+.TH f_color_save_4 "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_save_4 \-
+.SH SYNOPSIS
+.nf
+.B #include <color.h>
+.sp
+\fBf_status_t f_color_save_4\fP(
+    \fBconst f_color_format_t    \fP\fIformat\fP,
+    \fBconst f_string_static_t   \fP\fIcolor1\fP,
+    \fBconst f_string_static_t   \fP\fIcolor2\fP,
+    \fBconst f_string_static_t   \fP\fIcolor3\fP,
+    \fBconst f_string_static_t   \fP\fIcolor4\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Save color information to some string using four color codes.
+.PP
+This is environment sensitive. If TERM is not defined or set to "linux", then macro_f_color_t_set_linux() is used. Otherwise macro_f_color_t_set_xterminal() is used.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B format
+The color format parts.
+
+.TP
+.B color1
+A color to assign.
+
+.TP
+.B color2
+A second color to assign. Ignored if color1.used is 0.
+
+.TP
+.B color3
+A third color to assign. Ignored if color1.used or color2.used is 0.
+
+.TP
+.B color4
+A fourth color to assign. Ignored if color1.used, color2.used, or color3.used is 0.
+
+.TP
+.B buffer
+The string to save the colors to. The buffer will become NULL terminated after the appended string length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide structure for containing color format control strings.
+.PP
+medium: String used to designate the separation between two codes in a color code sequence.
+.sp
+.RS
+.nf
+\fB
+struct f_color_format_t {
+  f_string_static_t \fIbegin\fP;
+  f_string_static_t \fIend\fP;
+  f_string_static_t \fImedium\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcolor.h\fP(3), \fIf_color_load_context\fP(3), \fIf_color_save_1\fP(3), \fIf_color_save_2\fP(3), \fIf_color_save_3\fP(3), \fIf_color_save_4\fP(3), \fIf_color_save_5\fP(3), \fImacro_f_color_t_set_linux()\fP, \fImacro_f_color_t_set_xterminal()\fP, \fIf_memory_array_increase_by()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_color/data/documentation/man/man3/f_color_save_5.3 b/level_0/f_color/data/documentation/man/man3/f_color_save_5.3
new file mode 100644 (file)
index 0000000..4dc81b6
--- /dev/null
@@ -0,0 +1,217 @@
+.TH f_color_save_5 "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_color_save_5 \-
+.SH SYNOPSIS
+.nf
+.B #include <color.h>
+.sp
+\fBf_status_t f_color_save_5\fP(
+    \fBconst f_color_format_t    \fP\fIformat\fP,
+    \fBconst f_string_static_t   \fP\fIcolor1\fP,
+    \fBconst f_string_static_t   \fP\fIcolor2\fP,
+    \fBconst f_string_static_t   \fP\fIcolor3\fP,
+    \fBconst f_string_static_t   \fP\fIcolor4\fP,
+    \fBconst f_string_static_t   \fP\fIcolor5\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Save color information to some string using five color codes.
+.PP
+Five colors is the max that may be associated with a single color format block.
+.PP
+This is environment sensitive. If TERM is not defined or set to "linux", then macro_f_color_t_set_linux() is used. Otherwise macro_f_color_t_set_xterminal() is used.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B format
+The color format parts.
+
+.TP
+.B color1
+A color to assign.
+
+.TP
+.B color2
+A second color to assign. Ignored if color1.used is 0.
+
+.TP
+.B color3
+A third color to assign. Ignored if color1.used or color2.used is 0.
+
+.TP
+.B color4
+A fourth color to assign. Ignored if color1.used, color2.used, or color3.used is 0.
+
+.TP
+.B color5
+A fifth color to assign. Ignored if color1.used, color2.used, color3.used, or color4.used is 0.
+
+.TP
+.B buffer
+The string to save the colors to. The buffer will become NULL terminated after the appended string length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide structure for containing color format control strings.
+.PP
+medium: String used to designate the separation between two codes in a color code sequence.
+.sp
+.RS
+.nf
+\fB
+struct f_color_format_t {
+  f_string_static_t \fIbegin\fP;
+  f_string_static_t \fIend\fP;
+  f_string_static_t \fImedium\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcolor.h\fP(3), \fIf_color_load_context\fP(3), \fIf_color_save_1\fP(3), \fIf_color_save_2\fP(3), \fIf_color_save_3\fP(3), \fIf_color_save_4\fP(3), \fIf_color_save_5\fP(3), \fImacro_f_color_t_set_linux()\fP, \fImacro_f_color_t_set_xterminal()\fP, \fIf_memory_array_increase_by()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare.3 b/level_0/f_compare/data/documentation/man/man3/f_compare.3
new file mode 100644 (file)
index 0000000..6e421d1
--- /dev/null
@@ -0,0 +1,53 @@
+.TH f_compare "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare\fP(
+    \fBconst f_string_t          \fP\fIstring1\fP,
+    \fBconst f_string_t          \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic.3
new file mode 100644 (file)
index 0000000..3202849
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_compare_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIstring1\fP,
+    \fBconst f_string_static_t \fP\fIstring2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except.3
new file mode 100644 (file)
index 0000000..d6318b4
--- /dev/null
@@ -0,0 +1,146 @@
+.TH f_compare_dynamic_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_except \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_except\fP(
+    \fBconst f_string_static_t    \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_string.3
new file mode 100644 (file)
index 0000000..ba6cdc4
--- /dev/null
@@ -0,0 +1,130 @@
+.TH f_compare_dynamic_except_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_except_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_except_string\fP(
+    \fBconst f_string_t           \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_trim.3
new file mode 100644 (file)
index 0000000..6c70d31
--- /dev/null
@@ -0,0 +1,148 @@
+.TH f_compare_dynamic_except_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_except_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_except_trim\fP(
+    \fBconst f_string_static_t    \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_except_trim_string.3
new file mode 100644 (file)
index 0000000..0c70f5c
--- /dev/null
@@ -0,0 +1,130 @@
+.TH f_compare_dynamic_except_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_except_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_except_trim_string\fP(
+    \fBconst f_string_t           \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial.3
new file mode 100644 (file)
index 0000000..da417f3
--- /dev/null
@@ -0,0 +1,144 @@
+.TH f_compare_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial\fP(
+    \fBconst f_string_static_t \fP\fIstring1\fP,
+    \fBconst f_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t         \fP\fIrange1\fP,
+    \fBconst f_range_t         \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_dynamic.3
new file mode 100644 (file)
index 0000000..7616484
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_compare_dynamic_partial_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIstring1\fP,
+    \fBconst f_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t         \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except.3
new file mode 100644 (file)
index 0000000..84b4e32
--- /dev/null
@@ -0,0 +1,196 @@
+.TH f_compare_dynamic_partial_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_except \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_except\fP(
+    \fBconst f_string_static_t    \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_range_t            \fP\fIrange1\fP,
+    \fBconst f_range_t            \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_dynamic.3
new file mode 100644 (file)
index 0000000..1cb8654
--- /dev/null
@@ -0,0 +1,171 @@
+.TH f_compare_dynamic_partial_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_except_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_range_t            \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_string.3
new file mode 100644 (file)
index 0000000..4c2a7d6
--- /dev/null
@@ -0,0 +1,153 @@
+.TH f_compare_dynamic_partial_except_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_except_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_except_string\fP(
+    \fBconst f_string_t           \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_range_t            \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim.3
new file mode 100644 (file)
index 0000000..975d3fb
--- /dev/null
@@ -0,0 +1,198 @@
+.TH f_compare_dynamic_partial_except_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_except_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_except_trim\fP(
+    \fBconst f_string_static_t    \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_range_t            \fP\fIrange1\fP,
+    \fBconst f_range_t            \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim_dynamic.3
new file mode 100644 (file)
index 0000000..e848ad3
--- /dev/null
@@ -0,0 +1,173 @@
+.TH f_compare_dynamic_partial_except_trim_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_except_trim_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_except_trim_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_range_t            \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_except_trim_string.3
new file mode 100644 (file)
index 0000000..91c16d2
--- /dev/null
@@ -0,0 +1,155 @@
+.TH f_compare_dynamic_partial_except_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_except_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_except_trim_string\fP(
+    \fBconst f_string_t           \fP\fIstring1\fP,
+    \fBconst f_string_static_t    \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_range_t            \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_string.3
new file mode 100644 (file)
index 0000000..4eb52a2
--- /dev/null
@@ -0,0 +1,101 @@
+.TH f_compare_dynamic_partial_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_string\fP(
+    \fBconst f_string_t          \fP\fIstring1\fP,
+    \fBconst f_string_static_t   \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP,
+    \fBconst f_range_t           \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim.3
new file mode 100644 (file)
index 0000000..71fae81
--- /dev/null
@@ -0,0 +1,146 @@
+.TH f_compare_dynamic_partial_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_trim\fP(
+    \fBconst f_string_static_t \fP\fIstring1\fP,
+    \fBconst f_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t         \fP\fIrange1\fP,
+    \fBconst f_range_t         \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim_dynamic.3
new file mode 100644 (file)
index 0000000..6080efe
--- /dev/null
@@ -0,0 +1,121 @@
+.TH f_compare_dynamic_partial_trim_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_trim_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_trim_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIstring1\fP,
+    \fBconst f_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t         \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_partial_trim_string.3
new file mode 100644 (file)
index 0000000..64a387d
--- /dev/null
@@ -0,0 +1,103 @@
+.TH f_compare_dynamic_partial_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_partial_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_partial_trim_string\fP(
+    \fBconst f_string_t          \fP\fIstring1\fP,
+    \fBconst f_string_static_t   \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP,
+    \fBconst f_range_t           \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_string.3
new file mode 100644 (file)
index 0000000..653607c
--- /dev/null
@@ -0,0 +1,78 @@
+.TH f_compare_dynamic_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_string\fP(
+    \fBconst f_string_t          \fP\fIstring1\fP,
+    \fBconst f_string_static_t   \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_trim.3
new file mode 100644 (file)
index 0000000..364b497
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_compare_dynamic_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_trim\fP(
+    \fBconst f_string_static_t \fP\fIstring1\fP,
+    \fBconst f_string_static_t \fP\fIstring2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_dynamic_trim_string.3
new file mode 100644 (file)
index 0000000..037701d
--- /dev/null
@@ -0,0 +1,78 @@
+.TH f_compare_dynamic_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_dynamic_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_dynamic_trim_string\fP(
+    \fBconst f_string_t          \fP\fIstring1\fP,
+    \fBconst f_string_static_t   \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_except.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_except.3
new file mode 100644 (file)
index 0000000..ba1b0a1
--- /dev/null
@@ -0,0 +1,106 @@
+.TH f_compare_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_except \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_except\fP(
+    \fBconst f_string_t           \fP\fIstring1\fP,
+    \fBconst f_string_t           \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_except_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_except_trim.3
new file mode 100644 (file)
index 0000000..de52b3c
--- /dev/null
@@ -0,0 +1,108 @@
+.TH f_compare_except_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_except_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_except_trim\fP(
+    \fBconst f_string_t           \fP\fIstring1\fP,
+    \fBconst f_string_t           \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_trim.3
new file mode 100644 (file)
index 0000000..3cfd0a0
--- /dev/null
@@ -0,0 +1,55 @@
+.TH f_compare_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <compare.h>
+.sp
+\fBf_status_t f_compare_trim\fP(
+    \fBconst f_string_t          \fP\fIstring1\fP,
+    \fBconst f_string_t          \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompare.h\fP(3), \fIf_compare\fP(3), \fIf_compare_dynamic\fP(3), \fIf_compare_dynamic_except\fP(3), \fIf_compare_dynamic_except_string\fP(3), \fIf_compare_dynamic_except_trim\fP(3), \fIf_compare_dynamic_except_trim_string\fP(3), \fIf_compare_dynamic_partial\fP(3), \fIf_compare_dynamic_partial_dynamic\fP(3), \fIf_compare_dynamic_partial_except\fP(3), \fIf_compare_dynamic_partial_except_dynamic\fP(3), \fIf_compare_dynamic_partial_except_string\fP(3), \fIf_compare_dynamic_partial_except_trim\fP(3), \fIf_compare_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_except_trim_string\fP(3), \fIf_compare_dynamic_partial_string\fP(3), \fIf_compare_dynamic_partial_trim\fP(3), \fIf_compare_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_dynamic_partial_trim_string\fP(3), \fIf_compare_dynamic_string\fP(3), \fIf_compare_dynamic_trim\fP(3), \fIf_compare_dynamic_trim_string\fP(3), \fIf_compare_except\fP(3), \fIf_compare_except_trim\fP(3), \fIf_compare_trim\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf.3
new file mode 100644 (file)
index 0000000..5b7d1e3
--- /dev/null
@@ -0,0 +1,53 @@
+.TH f_compare_utf "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf\fP(
+    \fBconst f_utf_string_t      \fP\fIstring1\fP,
+    \fBconst f_utf_string_t      \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic.3
new file mode 100644 (file)
index 0000000..9ba1205
--- /dev/null
@@ -0,0 +1,90 @@
+.TH f_compare_utf_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except.3
new file mode 100644 (file)
index 0000000..c515a86
--- /dev/null
@@ -0,0 +1,142 @@
+.TH f_compare_utf_dynamic_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_except \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_except\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_string.3
new file mode 100644 (file)
index 0000000..0f5b55d
--- /dev/null
@@ -0,0 +1,128 @@
+.TH f_compare_utf_dynamic_except_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_except_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_except_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_trim.3
new file mode 100644 (file)
index 0000000..4450925
--- /dev/null
@@ -0,0 +1,144 @@
+.TH f_compare_utf_dynamic_except_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_except_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_except_trim\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_except_trim_string.3
new file mode 100644 (file)
index 0000000..ad0b651
--- /dev/null
@@ -0,0 +1,128 @@
+.TH f_compare_utf_dynamic_except_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_except_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_except_trim_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial.3
new file mode 100644 (file)
index 0000000..7c9e760
--- /dev/null
@@ -0,0 +1,140 @@
+.TH f_compare_utf_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_dynamic.3
new file mode 100644 (file)
index 0000000..e1d8352
--- /dev/null
@@ -0,0 +1,115 @@
+.TH f_compare_utf_dynamic_partial_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_dynamic\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except.3
new file mode 100644 (file)
index 0000000..6c80998
--- /dev/null
@@ -0,0 +1,192 @@
+.TH f_compare_utf_dynamic_partial_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_except \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_except\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_dynamic.3
new file mode 100644 (file)
index 0000000..3c21156
--- /dev/null
@@ -0,0 +1,167 @@
+.TH f_compare_utf_dynamic_partial_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_except_dynamic\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_string.3
new file mode 100644 (file)
index 0000000..274fee2
--- /dev/null
@@ -0,0 +1,151 @@
+.TH f_compare_utf_dynamic_partial_except_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_except_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_except_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim.3
new file mode 100644 (file)
index 0000000..d6de403
--- /dev/null
@@ -0,0 +1,194 @@
+.TH f_compare_utf_dynamic_partial_except_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_except_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_except_trim\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim_dynamic.3
new file mode 100644 (file)
index 0000000..2b7aec0
--- /dev/null
@@ -0,0 +1,169 @@
+.TH f_compare_utf_dynamic_partial_except_trim_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_except_trim_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_except_trim_dynamic\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_except_trim_string.3
new file mode 100644 (file)
index 0000000..b4729e3
--- /dev/null
@@ -0,0 +1,153 @@
+.TH f_compare_utf_dynamic_partial_except_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_except_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_except_trim_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t  \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_string.3
new file mode 100644 (file)
index 0000000..35b8f8f
--- /dev/null
@@ -0,0 +1,99 @@
+.TH f_compare_utf_dynamic_partial_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim.3
new file mode 100644 (file)
index 0000000..7f17fb4
--- /dev/null
@@ -0,0 +1,142 @@
+.TH f_compare_utf_dynamic_partial_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_trim\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given ranges.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range1
+A range within the string1 to restrict the comparison to.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim_dynamic.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim_dynamic.3
new file mode 100644 (file)
index 0000000..82a6a57
--- /dev/null
@@ -0,0 +1,117 @@
+.TH f_compare_utf_dynamic_partial_trim_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_trim_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_trim_dynamic\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_partial_trim_string.3
new file mode 100644 (file)
index 0000000..a4ffa62
--- /dev/null
@@ -0,0 +1,101 @@
+.TH f_compare_utf_dynamic_partial_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_partial_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_partial_trim_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP,
+    \fBconst f_range_t             \fP\fIrange2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp(), but restricted to the given range for the second string.
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.TP
+.B range2
+A range within the string2 to restrict the comparison to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_string.3
new file mode 100644 (file)
index 0000000..ad1642f
--- /dev/null
@@ -0,0 +1,76 @@
+.TH f_compare_utf_dynamic_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_trim.3
new file mode 100644 (file)
index 0000000..863eecb
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_compare_utf_dynamic_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_trim\fP(
+    \fBconst f_utf_string_static_t \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_trim_string.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_dynamic_trim_string.3
new file mode 100644 (file)
index 0000000..f8a35ca
--- /dev/null
@@ -0,0 +1,76 @@
+.TH f_compare_utf_dynamic_trim_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_dynamic_trim_string \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_dynamic_trim_string\fP(
+    \fBconst f_utf_string_t        \fP\fIstring1\fP,
+    \fBconst f_utf_string_static_t \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t   \fP\fIlength1\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This operates with the first string being a traditional string.
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+The length of string1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_except.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_except.3
new file mode 100644 (file)
index 0000000..3700d54
--- /dev/null
@@ -0,0 +1,106 @@
+.TH f_compare_utf_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_except \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_except\fP(
+    \fBconst f_utf_string_t       \fP\fIstring1\fP,
+    \fBconst f_utf_string_t       \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. All 1-byte characters in except1 and except2 are ignored.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_except_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_except_trim.3
new file mode 100644 (file)
index 0000000..155bb0e
--- /dev/null
@@ -0,0 +1,108 @@
+.TH f_compare_utf_except_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_except_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_except_trim\fP(
+    \fBconst f_utf_string_t       \fP\fIstring1\fP,
+    \fBconst f_utf_string_t       \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength2\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept1\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+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.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_combining(). Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.TP
+.B except1
+A set of locations within string1 to ignore. This assumes/requires that the locations be in linear order.
+
+.TP
+.B except2
+A set of locations within string2 to ignore. This assumes/requires that the locations be in linear order.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_combining()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_compare/data/documentation/man/man3/f_compare_utf_trim.3 b/level_0/f_compare/data/documentation/man/man3/f_compare_utf_trim.3
new file mode 100644 (file)
index 0000000..8e2495b
--- /dev/null
@@ -0,0 +1,55 @@
+.TH f_compare_utf_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_compare_utf_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_compare_utf_trim\fP(
+    \fBconst f_utf_string_t      \fP\fIstring1\fP,
+    \fBconst f_utf_string_t      \fP\fIstring2\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength1\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two UTF-8 strings, similar to strncmp().
+.PP
+This does not stop on NULL. NULL characters are ignored. Ignores leading and trailing whitespace.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string1
+String to compare.
+
+.TP
+.B string2
+String to compare.
+
+.TP
+.B length1
+Length of string1.
+
+.TP
+.B length2
+Length of string2.
+
+.SH RETURN VALUE
+.PP
+F_equal_to when both strings equal. F_equal_to_not when both strings do not equal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_compare_utf\fP(3), \fIf_compare_utf_dynamic\fP(3), \fIf_compare_utf_dynamic_except\fP(3), \fIf_compare_utf_dynamic_except_string\fP(3), \fIf_compare_utf_dynamic_except_trim\fP(3), \fIf_compare_utf_dynamic_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial\fP(3), \fIf_compare_utf_dynamic_partial_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except\fP(3), \fIf_compare_utf_dynamic_partial_except_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_string\fP(3), \fIf_compare_utf_dynamic_partial_except_trim\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_except_trim_string\fP(3), \fIf_compare_utf_dynamic_partial_string\fP(3), \fIf_compare_utf_dynamic_partial_trim\fP(3), \fIf_compare_utf_dynamic_partial_trim_dynamic\fP(3), \fIf_compare_utf_dynamic_partial_trim_string\fP(3), \fIf_compare_utf_dynamic_string\fP(3), \fIf_compare_utf_dynamic_trim\fP(3), \fIf_compare_utf_dynamic_trim_string\fP(3), \fIf_compare_utf_except\fP(3), \fIf_compare_utf_except_trim\fP(3), \fIf_compare_utf_trim\fP(3), \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_environment_process.3 b/level_0/f_console/data/documentation/man/man3/f_console_environment_process.3
new file mode 100644 (file)
index 0000000..bb6b257
--- /dev/null
@@ -0,0 +1,84 @@
+.TH f_console_environment_process "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_environment_process \-
+.SH SYNOPSIS
+.nf
+.B #include <console.h>
+.sp
+\fBf_status_t f_console_environment_process\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBf_string_maps_t *const      \fP\fIenvironment\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Transcribe the NULL terminated environment strings into maps.
+.PP
+All values are appended to the environment maps.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B arguments
+The arguments to process.
+
+.TP
+.B environment
+Maps representing the environment variable names and values. Both the name and the value strings may not be NULL terminated. Both the name and the value strings may be pointers to the envp memory addresses.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if the arguments.envp pointer is NULL or there are no environment variables in arguments.envp.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconsole.h\fP(3), \fIf_console_environment_process\fP(3), \fIf_console_identify\fP(3), \fIf_console_parameter_prioritize_left\fP(3), \fIf_console_parameter_prioritize_right\fP(3), \fIf_console_parameter_process\fP(3), \fIf_console_parameter_reset\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_identify.3 b/level_0/f_console/data/documentation/man/man3/f_console_identify.3
new file mode 100644 (file)
index 0000000..e0700f9
--- /dev/null
@@ -0,0 +1,39 @@
+.TH f_console_identify "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_identify \-
+.SH SYNOPSIS
+.nf
+.B #include <console.h>
+.sp
+\fBf_status_t f_console_identify\fP(
+    \fBconst f_string_t          \fP\fIinput\fP,
+    \fBf_console_result_t *const \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the type code represented by the given input parameter.
+.SH PARAMETERS
+.TP
+.B input
+The input parameter to process.
+
+.TP
+.B result
+The flag with the console type bits determined by this function.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not the input string is empty.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconsole.h\fP(3), \fIf_console_environment_process\fP(3), \fIf_console_identify\fP(3), \fIf_console_parameter_prioritize_left\fP(3), \fIf_console_parameter_prioritize_right\fP(3), \fIf_console_parameter_process\fP(3), \fIf_console_parameter_reset\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameter_prioritize_left.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameter_prioritize_left.3
new file mode 100644 (file)
index 0000000..57b5935
--- /dev/null
@@ -0,0 +1,91 @@
+.TH f_console_parameter_prioritize_left "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameter_prioritize_left \-
+.SH SYNOPSIS
+.nf
+.B #include <console.h>
+.sp
+\fBf_status_t f_console_parameter_prioritize_left\fP(
+    \fBconst f_console_parameters_t \fP\fIparameters\fP,
+    \fBconst f_uint16s_t            \fP\fIchoices\fP,
+    \fBf_number_unsigned_t *const   \fP\fIdecision\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given a set of parameter choices, determine which one has the highest priority.
+.PP
+The priority is determined by viewing the parameters from left to right. The left-most parameter defined in the set has the priority over others.
+.PP
+For example, the color context modes override each other, so only one gets priority. If given, say "+l ++no_color +d", the "+d" would be the left-most parameter "+l" and "++no_color". The decision would be "+d".
+.PP
+This also applies to short parameters combined into one, such as "+lnd", the "d" would again be the decision.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B parameters
+The parameters to process.
+
+.TP
+.B choices
+An array of numeric ids, each representing a parameter within the parameters variable. The order does not matter.
+
+.TP
+.B decision
+The location in the choices array representing the decision. If none of the parameters are found, then this will not be updated (therefore it is safe to have it pre-initialized to the default).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint16_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint16s_t {
+  uint16_t           *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if no parameters were matched with the available choices.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconsole.h\fP(3), \fIf_console_environment_process\fP(3), \fIf_console_identify\fP(3), \fIf_console_parameter_prioritize_left\fP(3), \fIf_console_parameter_prioritize_right\fP(3), \fIf_console_parameter_process\fP(3), \fIf_console_parameter_reset\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameter_prioritize_right.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameter_prioritize_right.3
new file mode 100644 (file)
index 0000000..e47c583
--- /dev/null
@@ -0,0 +1,91 @@
+.TH f_console_parameter_prioritize_right "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameter_prioritize_right \-
+.SH SYNOPSIS
+.nf
+.B #include <console.h>
+.sp
+\fBf_status_t f_console_parameter_prioritize_right\fP(
+    \fBconst f_console_parameters_t \fP\fIparameters\fP,
+    \fBconst f_uint16s_t            \fP\fIchoices\fP,
+    \fBf_number_unsigned_t *const   \fP\fIdecision\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given a set of parameter choices, determine which one has the highest priority.
+.PP
+The priority is determined by viewing the parameters from left to right. The right-most parameter defined in the set has the priority over others.
+.PP
+For example, the color context modes override each other, so only one gets priority. If given, say "+l ++no_color +d", the "+d" would be the right-most parameter "+l" and "++no_color". The decision would be "+d".
+.PP
+This also applies to short parameters combined into one, such as "+lnd", the "d" would again be the decision.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B parameters
+The parameters to process.
+
+.TP
+.B choices
+An array of numeric ids, each representing a parameter within the parameters variable. The order does not matter.
+
+.TP
+.B decision
+The location in the choices array representing the decision. If none of the parameters are found, then this will not be updated (therefore it is safe to have it pre-initialized to the default).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint16_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint16s_t {
+  uint16_t           *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if no parameters were matched with the available choices.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconsole.h\fP(3), \fIf_console_environment_process\fP(3), \fIf_console_identify\fP(3), \fIf_console_parameter_prioritize_left\fP(3), \fIf_console_parameter_prioritize_right\fP(3), \fIf_console_parameter_process\fP(3), \fIf_console_parameter_reset\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameter_process.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameter_process.3
new file mode 100644 (file)
index 0000000..9639a85
--- /dev/null
@@ -0,0 +1,99 @@
+.TH f_console_parameter_process "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameter_process \-
+.SH SYNOPSIS
+.nf
+.B #include <console.h>
+.sp
+\fBvoid f_console_parameter_process\fP(
+    \fBconst f_console_arguments_t   \fP\fIarguments\fP,
+    \fBf_console_parameters_t *const \fP\fIparameters\fP,
+    \fBf_state_t *const              \fP\fIstate\fP,
+    \fBvoid *const                   \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process console parameters.
+.PP
+Additional parameters must immediately follow the parameter or grouped parameters, such as "tar -xfc file.tar.gz" or "tar -x -f file.tar.gz -c".
+.PP
+Additional parameters must immediately follow the parameter, such as "tar --extract --file file.tar.gz --create".
+.PP
+Additional parameters must immediately follow the parameter, such as "tar extract file file.tar.gz create".
+.PP
+Any changes to this function may likely require changes to f_console_parameter_state_t and callbacks.
+.PP
+This alters state.status: F_okay on success. F_data_not if argc is 0, argv is a NULL pointer, or if argv[0] is NULL. F_complete_not if "values" parameters were expected but not found.
+.PP
+F_array_too_large (with error bit) if a buffer would exceed max length. F_failure (with error bit) if width is not long enough to convert when processing arguments as UTF-8. F_interrupt (with error bit) if an interrupt is received via the state.interrupt callback. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Set to NULL to not use.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process.
+
+.TP
+.B parameters
+The console parameters to look for.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.TP
+.B data
+(optional) A variable passed to the callback, if provided.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconsole.h\fP(3), \fIf_console_environment_process\fP(3), \fIf_console_identify\fP(3), \fIf_console_parameter_prioritize_left\fP(3), \fIf_console_parameter_prioritize_right\fP(3), \fIf_console_parameter_process\fP(3), \fIf_console_parameter_reset\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_utf_char_to_character()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_utf_char_to_character()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameter_reset.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameter_reset.3
new file mode 100644 (file)
index 0000000..1e630cf
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_console_parameter_reset "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameter_reset \-
+.SH SYNOPSIS
+.nf
+.B #include <console.h>
+.sp
+\fBf_status_t f_console_parameter_reset\fP(
+    \fBf_console_parameters_t *const \fP\fIparameters\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset all parameter properties.
+.PP
+values_total. This only alters "state" flags in parameters[].flag.
+.SH PARAMETERS
+.TP
+.B parameters
+The console parameters to reset.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconsole.h\fP(3), \fIf_console_environment_process\fP(3), \fIf_console_identify\fP(3), \fIf_console_parameter_prioritize_left\fP(3), \fIf_console_parameter_prioritize_right\fP(3), \fIf_console_parameter_process\fP(3), \fIf_console_parameter_reset\fP(3), \fImemset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameter_state_delete.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameter_state_delete.3
new file mode 100644 (file)
index 0000000..a5411bc
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_console_parameter_state_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameter_state_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t f_console_parameter_state_delete\fP(
+    \fBf_console_parameter_state_t *const \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete any dynamic allocated data on the state object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B state
+The state object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+State exclusively intended to be used by f_console_parameter_process() and the associated callback.
+.PP
+How these are used is tightly coupled to the f_console_parameter_process(). The f_console_parameter_process() function should be read for the detailed explanation on how to use these. The description here is a relatively generalized description.
+.PP
+Any changes to the f_console_parameter_process() code likely requires changes or re-interpretation of these properties.
+.PP
+need: The number of additional parameters that need to be grabbed.
+.PP
+wrap_up_stop: This is identical to the wrap_up, but it happens due to the stop point being reached.
+.PP
+When using the callback, then the responsibility of ensuring the proper and secure handling of the data is on in the callback. Failure to properly handle this can lead to integrity and security issues.
+.PP
+The result is used to determine what type of parameter is being processed (a short, a long, a remaining, etc..).
+.PP
+The location_sub should start after any of the symbols (for example for 'parameter', the symbol is the two '-', so the initial location_sub should be 2).
+.PP
+The increment_by is generally set to 1 when performing the short matches and is generally set to the entire length of the string (minus the length of the symbol) for long matches. Each character in a short parameter potentially represents a parameter. There will be a loop pass for each character in the short string due to the value of the increment_by.
+.PP
+The need represents the total number of arguments that are needed by the parameter that is just matched. The index of the parameter that is just matched is stored in the "match" variable.
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameter_state_t {
+  uint8_t              \fItype\fP;
+  uint8_t              \fIdepth\fP;
+  uint8_t              \fIwidth\fP;
+  uint8_t              \fIfound\fP;
+  f_console_result_t   \fIresult\fP;
+  f_state_t           *\fIstate\fP;
+  f_number_unsigned_t  \fIat\fP;
+  f_number_unsigned_t  \fIlocation\fP;
+  f_number_unsigned_t  \fIlocation_sub\fP;
+  f_number_unsigneds_t \fIneeds\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIf_console_parameter_state_delete\fP(3), \fIf_console_parameter_state_destroy\fP(3), \fIf_console_parameters_delete\fP(3), \fIf_console_parameters_destroy\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameter_state_destroy.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameter_state_destroy.3
new file mode 100644 (file)
index 0000000..194382c
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_console_parameter_state_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameter_state_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t f_console_parameter_state_destroy\fP(
+    \fBf_console_parameter_state_t *const \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy any dynamic allocated data on the state object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+State exclusively intended to be used by f_console_parameter_process() and the associated callback.
+.PP
+How these are used is tightly coupled to the f_console_parameter_process(). The f_console_parameter_process() function should be read for the detailed explanation on how to use these. The description here is a relatively generalized description.
+.PP
+Any changes to the f_console_parameter_process() code likely requires changes or re-interpretation of these properties.
+.PP
+need: The number of additional parameters that need to be grabbed.
+.PP
+wrap_up_stop: This is identical to the wrap_up, but it happens due to the stop point being reached.
+.PP
+When using the callback, then the responsibility of ensuring the proper and secure handling of the data is on in the callback. Failure to properly handle this can lead to integrity and security issues.
+.PP
+The result is used to determine what type of parameter is being processed (a short, a long, a remaining, etc..).
+.PP
+The location_sub should start after any of the symbols (for example for 'parameter', the symbol is the two '-', so the initial location_sub should be 2).
+.PP
+The increment_by is generally set to 1 when performing the short matches and is generally set to the entire length of the string (minus the length of the symbol) for long matches. Each character in a short parameter potentially represents a parameter. There will be a loop pass for each character in the short string due to the value of the increment_by.
+.PP
+The need represents the total number of arguments that are needed by the parameter that is just matched. The index of the parameter that is just matched is stored in the "match" variable.
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameter_state_t {
+  uint8_t              \fItype\fP;
+  uint8_t              \fIdepth\fP;
+  uint8_t              \fIwidth\fP;
+  uint8_t              \fIfound\fP;
+  f_console_result_t   \fIresult\fP;
+  f_state_t           *\fIstate\fP;
+  f_number_unsigned_t  \fIat\fP;
+  f_number_unsigned_t  \fIlocation\fP;
+  f_number_unsigned_t  \fIlocation_sub\fP;
+  f_number_unsigneds_t \fIneeds\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIf_console_parameter_state_delete\fP(3), \fIf_console_parameter_state_destroy\fP(3), \fIf_console_parameters_delete\fP(3), \fIf_console_parameters_destroy\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameters_delete.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameters_delete.3
new file mode 100644 (file)
index 0000000..0c76efc
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_console_parameters_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameters_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t f_console_parameters_delete\fP(
+    \fBf_console_parameters_t *const \fP\fIparameters\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete any dynamic allocated data on the parameters object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B parameters
+The parameters object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIf_console_parameter_state_delete\fP(3), \fIf_console_parameter_state_destroy\fP(3), \fIf_console_parameters_delete\fP(3), \fIf_console_parameters_destroy\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_console/data/documentation/man/man3/f_console_parameters_destroy.3 b/level_0/f_console/data/documentation/man/man3/f_console_parameters_destroy.3
new file mode 100644 (file)
index 0000000..1b2e04f
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_console_parameters_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_console_parameters_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t f_console_parameters_destroy\fP(
+    \fBf_console_parameters_t *const \fP\fIparameters\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy any dynamic allocated data on the parameters object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B parameters
+The parameters object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIf_console_parameter_state_delete\fP(3), \fIf_console_parameter_state_destroy\fP(3), \fIf_console_parameters_delete\fP(3), \fIf_console_parameters_destroy\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_control_group/data/documentation/man/man3/f_control_group_copy.3 b/level_0/f_control_group/data/documentation/man/man3/f_control_group_copy.3
new file mode 100644 (file)
index 0000000..166e28b
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_control_group_copy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_control_group_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <control_group.h>
+.sp
+\fBf_status_t f_control_group_copy\fP(
+    \fBconst f_control_group_t  \fP\fIsource\fP,
+    \fBf_control_group_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy the source control group onto the destination control group.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_string_dynamics_append_all().
+.SH PARAMETERS
+.TP
+.B source
+The source to append.
+
+.TP
+.B destination
+The destination the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for associating some process with one or more control groups (cgroups).
+.PP
+groups: An array of control groups, relative to the sysfs path (such as "memory/example").
+.sp
+.RS
+.nf
+\fB
+struct f_control_group_t {
+  uint8_t             \fIas_new\fP;
+  f_string_dynamic_t  \fIpath\fP;
+  f_string_dynamics_t \fIgroups\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for associating some process with one or more control groups (cgroups).
+.PP
+groups: An array of control groups, relative to the sysfs path (such as "memory/example").
+.sp
+.RS
+.nf
+\fB
+struct f_control_group_t {
+  uint8_t             \fIas_new\fP;
+  f_string_dynamic_t  \fIpath\fP;
+  f_string_dynamics_t \fIgroups\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontrol_group.h\fP(3), \fIf_control_group_copy\fP(3), \fIf_string_dynamic_append()\fP, \fIf_string_dynamics_append_all()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamics_append_all()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_binary.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_binary.3
new file mode 100644 (file)
index 0000000..9281e8f
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_conversion_character_is_binary "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_is_binary \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_is_binary\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the given 1-byte character represents a boolean digit.
+.PP
+A boolean digit is either '0' or '1'.
+.PP
+This only checks against ASCII characters.
+.SH PARAMETERS
+.TP
+.B character
+The character to validate.
+
+.SH RETURN VALUE
+.PP
+F_true if character is a binary. F_false if character is not a binary.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_decimal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_decimal.3
new file mode 100644 (file)
index 0000000..d0fb259
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_conversion_character_is_decimal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_is_decimal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_is_decimal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the given 1-byte character represents a decimal digit.
+.PP
+A decimal digit is a character from the numbers '0' to '9'.
+.PP
+This only checks against ASCII characters.
+.SH PARAMETERS
+.TP
+.B character
+The character to validate.
+
+.SH RETURN VALUE
+.PP
+F_true if character is a decimal. F_false if character is not a decimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_duodecimal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_duodecimal.3
new file mode 100644 (file)
index 0000000..592b932
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_conversion_character_is_duodecimal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_is_duodecimal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_is_duodecimal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the given 1-byte character represents a duodecimal digit.
+.PP
+'b' or 'B': Character used to represent the number 11.
+.PP
+This only checks against ASCII characters.
+.SH PARAMETERS
+.TP
+.B character
+The character to validate.
+
+.SH RETURN VALUE
+.PP
+F_true if character is a duodecimal. F_false if character is not a duodecimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_hexidecimal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_hexidecimal.3
new file mode 100644 (file)
index 0000000..bd0a37f
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_conversion_character_is_hexidecimal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_is_hexidecimal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_is_hexidecimal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the given 1-byte character represents a hexidecimal digit.
+.PP
+'f' or 'F': Character used to represent the number 15.
+.PP
+This only checks against ASCII characters.
+.SH PARAMETERS
+.TP
+.B character
+The character to validate.
+
+.SH RETURN VALUE
+.PP
+F_true if character is a hexidecimal. F_false if character is not a hexidecimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_octal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_is_octal.3
new file mode 100644 (file)
index 0000000..9ac4aea
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_conversion_character_is_octal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_is_octal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_is_octal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the given 1-byte character represents a octal digit.
+.PP
+A decimal digit is a character from the numbers '0' to '7'.
+.PP
+This only checks against ASCII characters.
+.SH PARAMETERS
+.TP
+.B character
+The character to validate.
+
+.SH RETURN VALUE
+.PP
+F_true if character is an octal. F_false if character is not an octal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_binary.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_binary.3
new file mode 100644 (file)
index 0000000..4a9cec2
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_conversion_character_to_binary "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_to_binary \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_to_binary\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBuint8_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a single character into the binary digit that it represents.
+.PP
+F_number (with error bit) if no conversion was made due to non-binary values being found. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to convert.
+
+.TP
+.B number
+This will store the value of the converted character. This value is only changed on success.
+
+.SH RETURN VALUE
+.PP
+F_okay if character was converted to a binary.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_decimal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_decimal.3
new file mode 100644 (file)
index 0000000..4bca3bd
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_conversion_character_to_decimal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_to_decimal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_to_decimal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBuint8_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a single character into the decimal digit that it represents.
+.PP
+F_number (with error bit) if no conversion was made due to non-decimal values being found. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to convert.
+
+.TP
+.B number
+This will store the value of the converted character. This value is only changed on success.
+
+.SH RETURN VALUE
+.PP
+F_okay if character was converted to a decimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_duodecimal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_duodecimal.3
new file mode 100644 (file)
index 0000000..abfb982
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_conversion_character_to_duodecimal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_to_duodecimal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_to_duodecimal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBuint8_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a single character into the duodecimal digit that it represents.
+.PP
+F_number (with error bit) if no conversion was made due to non-duodecimal values being found. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to convert.
+
+.TP
+.B number
+This will store the value of the converted character. This value is only changed on success.
+
+.SH RETURN VALUE
+.PP
+F_okay if character was converted to a duodecimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_hexidecimal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_hexidecimal.3
new file mode 100644 (file)
index 0000000..6f21b1f
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_conversion_character_to_hexidecimal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_to_hexidecimal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_to_hexidecimal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBuint8_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a single character into the hexidecimal digit that it represents.
+.PP
+F_number (with error bit) if no conversion was made due to non-hexidecimal values being found. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to convert.
+
+.TP
+.B number
+This will store the value of the converted character. This value is only changed on success.
+
+.SH RETURN VALUE
+.PP
+F_okay if character was converted to a hexidecimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_octal.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_character_to_octal.3
new file mode 100644 (file)
index 0000000..62d9a4c
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_conversion_character_to_octal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_character_to_octal \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_character_to_octal\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBuint8_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a single character into the octal digit that it represents.
+.PP
+F_number (with error bit) if no conversion was made due to non-hexidecimal values being found. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to convert.
+
+.TP
+.B number
+This will store the value of the converted character. This value is only changed on success.
+
+.SH RETURN VALUE
+.PP
+F_okay if character was converted to a hexidecimal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_signed_print.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_signed_print.3
new file mode 100644 (file)
index 0000000..b1d04d4
--- /dev/null
@@ -0,0 +1,93 @@
+.TH f_conversion_number_signed_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_number_signed_print \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_number_signed_print\fP(
+    \fBconst f_number_signed_t   \fP\fInumber\fP,
+    \fBconst f_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a signed number into the decimal digit string that it represents.
+.PP
+The generated number is printed to the file stream.
+.PP
+This only supports the following base units: 2 through 16. This only supports base prefixes for: 2, 8, 10, 12, and 16.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file stream is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_output (with error bit) on any other file output error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B number
+The number to convert.
+
+.TP
+.B data
+The settings designating how to perform the conversion.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+width: The number of digits representing a minimum width (a width of 0, should result in not printing a 0 when the number is 0).
+.sp
+.RS
+.nf
+\fB
+struct f_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+  int      \fIwidth\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the number was converted to a string.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3), \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_signed_to_string.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_signed_to_string.3
new file mode 100644 (file)
index 0000000..c7d21f1
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_conversion_number_signed_to_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_number_signed_to_string \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_number_signed_to_string\fP(
+    \fBconst f_number_signed_t   \fP\fInumber\fP,
+    \fBconst f_conversion_data_t \fP\fIdata\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a signed number into the decimal digit string that it represents.
+.PP
+The generated number is appended to the destination string.
+.PP
+This only supports the following base units: 2 through 16. This only supports base prefixes for: 2, 8, 10, 12, and 16.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B number
+The number to convert.
+
+.TP
+.B data
+The settings designating how to perform the conversion.
+
+.TP
+.B destination
+The destination the converted string is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+width: The number of digits representing a minimum width (a width of 0, should result in not printing a 0 when the number is 0).
+.sp
+.RS
+.nf
+\fB
+struct f_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+  int      \fIwidth\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the number was converted to a string.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_unsigned_print.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_unsigned_print.3
new file mode 100644 (file)
index 0000000..dc9ccc5
--- /dev/null
@@ -0,0 +1,93 @@
+.TH f_conversion_number_unsigned_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_number_unsigned_print \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_number_unsigned_print\fP(
+    \fBconst f_number_unsigned_t \fP\fInumber\fP,
+    \fBconst f_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert an unsigned number into the decimal digit string that it represents.
+.PP
+The generated number is printed to the file stream.
+.PP
+This only supports the following base units: 2 through 16. This only supports base prefixes for: 2, 8, 10, 12, and 16.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file stream is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_output (with error bit) on any other file output error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B number
+The number to convert. This number is unsigned to allow for unsigned integers to be used. To represent a negative number, assign the flag f_conversion_data_flag_is_negative to data.flags.
+
+.TP
+.B data
+The settings designating how to perform the conversion.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+width: The number of digits representing a minimum width (a width of 0, should result in not printing a 0 when the number is 0).
+.sp
+.RS
+.nf
+\fB
+struct f_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+  int      \fIwidth\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the number was converted to a string.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3), \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_unsigned_to_string.3 b/level_0/f_conversion/data/documentation/man/man3/f_conversion_number_unsigned_to_string.3
new file mode 100644 (file)
index 0000000..add0a07
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_conversion_number_unsigned_to_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_conversion_number_unsigned_to_string \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t f_conversion_number_unsigned_to_string\fP(
+    \fBconst f_number_unsigned_t \fP\fInumber\fP,
+    \fBconst f_conversion_data_t \fP\fIdata\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert an unsigned number into the decimal digit string that it represents.
+.PP
+The generated number is appended to the destination string.
+.PP
+This only supports the following base units: 2 through 16. This only supports base prefixes for: 2, 8, 10, 12, and 16.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B number
+The number to convert.
+
+.TP
+.B data
+The settings designating how to perform the conversion.
+
+.TP
+.B destination
+The destination the converted string is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+width: The number of digits representing a minimum width (a width of 0, should result in not printing a 0 when the number is 0).
+.sp
+.RS
+.nf
+\fB
+struct f_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+  int      \fIwidth\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the number was converted to a string.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIf_conversion_character_is_binary\fP(3), \fIf_conversion_character_is_decimal\fP(3), \fIf_conversion_character_is_duodecimal\fP(3), \fIf_conversion_character_is_hexidecimal\fP(3), \fIf_conversion_character_is_octal\fP(3), \fIf_conversion_character_to_binary\fP(3), \fIf_conversion_character_to_decimal\fP(3), \fIf_conversion_character_to_duodecimal\fP(3), \fIf_conversion_character_to_hexidecimal\fP(3), \fIf_conversion_character_to_octal\fP(3), \fIf_conversion_number_signed_print\fP(3), \fIf_conversion_number_signed_to_string\fP(3), \fIf_conversion_number_unsigned_print\fP(3), \fIf_conversion_number_unsigned_to_string\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_create.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_create.3
new file mode 100644 (file)
index 0000000..54c686a
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_directory_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_create \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_create\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a directory at the given path.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_link_max (with error bit) max links limit reached or exceeded. F_file_found (with error bit) of a directory aleady exists at the path. F_file_found_not (with error bit) if a file within the path is not found (such as a broken symbolic link). F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B mode
+The directory mode to use when creating.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fImkdir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_create_at.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_create_at.3
new file mode 100644 (file)
index 0000000..50f2b6a
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_directory_create_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_create_at \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_create_at\fP(
+    \fBconst int               \fP\fIat_id\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a directory at the given path within the directories specified by the file descriptor.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_directory_link_max (with error bit) max links limit reached or exceeded. F_file_found (with error bit) of a directory aleady exists at the path. F_file_found_not (with error bit) if a file within the path is not found (such as a broken symbolic link). F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B at_id
+The parent directory, as an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B mode
+The directory mode to use when creating.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fImkdirat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_empty.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_empty.3
new file mode 100644 (file)
index 0000000..a25623e
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_directory_empty "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_empty\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+For some given path, check to see if is a directory and if the directory is empty.
+.PP
+F_directory_not (with error bit) if the path is not a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor after opening the path. F_directory_found_not (with error bit) if there is not file at the path. F_directory_read (with error bit) if there is an error while reading the directory. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_file_stat_at().
+.SH PARAMETERS
+.TP
+.B path
+Filesystem path to the directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on success and directory is empty. F_false on success and directory is not empty. F_data_not if source.used or destination.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIf_file_stat_at()\fP, \fIopendir()\fP, \fIscandir()\fP, \fIf_file_stat_at()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_exists.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_exists.3
new file mode 100644 (file)
index 0000000..c235c75
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_directory_exists "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_exists\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path and if that file is a directory or a symlink to a directory.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is a directory (or a symlink to a directory). F_false if path was found and path is not a directory. F_file_found_not if the path was not found. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_exists_at.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_exists_at.3
new file mode 100644 (file)
index 0000000..287f350
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_directory_exists_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_exists_at \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_exists_at\fP(
+    \fBconst int               \fP\fIat_id\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path and if that file is a directory or a symlink to a directory.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B at_id
+The parent directory, as an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B flag
+Any valid flag, such as F_directory_at_path_empty_d, F_directory_at_automount_no_d, or F_directory_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is a directory (or a symlink to a directory). F_false if path was found and path is not a directory. F_file_found_not if the path was not found. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_is.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_is.3
new file mode 100644 (file)
index 0000000..7ff84a3
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_directory_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_is \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_is\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path and if that file is a directory.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is a directory. F_false if path was found and path is not a directory (this includes symlinks). F_file_found_not if the path was not found. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_is_at.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_is_at.3
new file mode 100644 (file)
index 0000000..13efe9f
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_directory_is_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_is_at \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_is_at\fP(
+    \fBconst int               \fP\fIat_id\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path within the parent directory and if that file is a directory.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B at_id
+The parent directory, as an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B flag
+Any valid flag, such as F_directory_at_path_empty_d, F_directory_at_automount_no_d, or F_directory_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is a directory. F_false if path was found and path is not a directory. F_file_found_not if the path was not found. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_list.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_list.3
new file mode 100644 (file)
index 0000000..851d1d1
--- /dev/null
@@ -0,0 +1,79 @@
+.TH f_directory_list "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_list \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_list\fP(
+    \fBconst f_string_static_t                                              \fP\fIpath\fP,
+    \fBint(*)(const f_directory_entity_t *)                                 \fP\fIfilter\fP,
+    \fBint(*)(const f_directory_entity_t **, const f_directory_entity_t **) \fP\fIsort\fP,
+    \fBf_string_dynamics_t                                                 *\fP\fInames\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+For some given path, print the names of each file and/or directory inside the directory.
+.PP
+Allows specifying a custom filter and custom sort.
+.PP
+F_array_too_large (with error bit) if the directory buffer max length would be exceeded. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B filter
+A filter function of the form: int xxx(const struct direct *). Set to 0 to not use (NULL).
+
+.TP
+.B sort
+A sort function of the form: int xxx(const struct direct *, const struct direct *). Set to 0 to not use (NULL). There are two pre-made libc functions available for this: alphasort() and versionsort().
+
+.TP
+.B names
+Will be populated with the names of each file and/or directory inside path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_directory_empty if directory is empty.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIalphasort()\fP, \fIscandir()\fP, \fIversionsort()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_listing_delete.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_listing_delete.3
new file mode 100644 (file)
index 0000000..9824e43
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_directory_listing_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_listing_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <listing.h>
+.sp
+\fBf_status_t f_directory_listing_delete\fP(
+    \fBf_directory_listing_t *const \fP\fIlisting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete all arrays within the listing.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B listing
+The listing to fully delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a listing of paths found within a directory.
+.PP
+Each property represents a set of paths grouped by directory entity file type.
+.PP
+unknown: For anything else.
+.sp
+.RS
+.nf
+\fB
+struct f_directory_listing_t {
+  f_string_dynamics_t \fIblock\fP;
+  f_string_dynamics_t \fIcharacter\fP;
+  f_string_dynamics_t \fIdirectory\fP;
+  f_string_dynamics_t \fIregular\fP;
+  f_string_dynamics_t \fIlink\fP;
+  f_string_dynamics_t \fIfifo\fP;
+  f_string_dynamics_t \fIsocket\fP;
+  f_string_dynamics_t \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlisting.h\fP(3), \fIf_directory_listing_delete\fP(3), \fIf_directory_listing_destroy\fP(3), \fIf_directory_listings_delete_callback\fP(3), \fIf_directory_listings_destroy_callback\fP(3), \fIf_directory_listingss_delete_callback\fP(3), \fIf_directory_listingss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_listing_destroy.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_listing_destroy.3
new file mode 100644 (file)
index 0000000..c24fed8
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_directory_listing_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_listing_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <listing.h>
+.sp
+\fBf_status_t f_directory_listing_destroy\fP(
+    \fBf_directory_listing_t *const \fP\fIlisting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy all arrays within the listing.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B listing
+The listing to fully destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a listing of paths found within a directory.
+.PP
+Each property represents a set of paths grouped by directory entity file type.
+.PP
+unknown: For anything else.
+.sp
+.RS
+.nf
+\fB
+struct f_directory_listing_t {
+  f_string_dynamics_t \fIblock\fP;
+  f_string_dynamics_t \fIcharacter\fP;
+  f_string_dynamics_t \fIdirectory\fP;
+  f_string_dynamics_t \fIregular\fP;
+  f_string_dynamics_t \fIlink\fP;
+  f_string_dynamics_t \fIfifo\fP;
+  f_string_dynamics_t \fIsocket\fP;
+  f_string_dynamics_t \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlisting.h\fP(3), \fIf_directory_listing_delete\fP(3), \fIf_directory_listing_destroy\fP(3), \fIf_directory_listings_delete_callback\fP(3), \fIf_directory_listings_destroy_callback\fP(3), \fIf_directory_listingss_delete_callback\fP(3), \fIf_directory_listingss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_listings_delete_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_listings_delete_callback.3
new file mode 100644 (file)
index 0000000..d693c7b
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_listings_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_listings_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <listing.h>
+.sp
+\fBf_status_t f_directory_listings_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_directory_listings_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlisting.h\fP(3), \fIf_directory_listing_delete\fP(3), \fIf_directory_listing_destroy\fP(3), \fIf_directory_listings_delete_callback\fP(3), \fIf_directory_listings_destroy_callback\fP(3), \fIf_directory_listingss_delete_callback\fP(3), \fIf_directory_listingss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_listings_destroy_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_listings_destroy_callback.3
new file mode 100644 (file)
index 0000000..3356f07
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_listings_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_listings_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <listing.h>
+.sp
+\fBf_status_t f_directory_listings_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_directory_listings_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlisting.h\fP(3), \fIf_directory_listing_delete\fP(3), \fIf_directory_listing_destroy\fP(3), \fIf_directory_listings_delete_callback\fP(3), \fIf_directory_listings_destroy_callback\fP(3), \fIf_directory_listingss_delete_callback\fP(3), \fIf_directory_listingss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_listingss_delete_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_listingss_delete_callback.3
new file mode 100644 (file)
index 0000000..527d518
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_listingss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_listingss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <listing.h>
+.sp
+\fBf_status_t f_directory_listingss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_directory_listingss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlisting.h\fP(3), \fIf_directory_listing_delete\fP(3), \fIf_directory_listing_destroy\fP(3), \fIf_directory_listings_delete_callback\fP(3), \fIf_directory_listings_destroy_callback\fP(3), \fIf_directory_listingss_delete_callback\fP(3), \fIf_directory_listingss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_listingss_destroy_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_listingss_destroy_callback.3
new file mode 100644 (file)
index 0000000..635b794
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_listingss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_listingss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <listing.h>
+.sp
+\fBf_status_t f_directory_listingss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_directory_listingss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlisting.h\fP(3), \fIf_directory_listing_delete\fP(3), \fIf_directory_listing_destroy\fP(3), \fIf_directory_listings_delete_callback\fP(3), \fIf_directory_listings_destroy_callback\fP(3), \fIf_directory_listingss_delete_callback\fP(3), \fIf_directory_listingss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_open.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_open.3
new file mode 100644 (file)
index 0000000..1ae6c99
--- /dev/null
@@ -0,0 +1,76 @@
+.TH f_directory_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_open \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_open\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBint *const              \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open the directory specified by path.
+.PP
+This opens with O_PATH and O_CLOEXEC.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_found_not (with error bit) if directory was not found. F_directory_not (with error bit) file is not a directory. F_file_open_max (with error bit) too many open files. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B id
+The directory file descriptor.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIopen()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_open_at.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_open_at.3
new file mode 100644 (file)
index 0000000..60d0617
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_directory_open_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_open_at \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_open_at\fP(
+    \fBconst int               \fP\fIat_id\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBint *const              \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open the directory specified by path.
+.PP
+This opens with O_PATH and O_CLOEXEC.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_found_not (with error bit) if directory was not found. F_directory_not (with error bit) file is not a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_open_max (with error bit) too many open files. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B at_id
+The parent directory, as an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B id
+The directory file descriptor.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIopenat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_do_delete.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_do_delete.3
new file mode 100644 (file)
index 0000000..8f56281
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_directory_recurse_do_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_recurse_do_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <recurse_do.h>
+.sp
+\fBf_status_t f_directory_recurse_do_delete\fP(
+    \fBf_directory_recurse_do_t *const \fP\fIrecurse\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete all non-pointer based dynamic arrays within the recurse.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B recurse
+The recurse to fully delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrecurse_do.h\fP(3), \fIf_directory_recurse_do_delete\fP(3), \fIf_directory_recurse_do_destroy\fP(3), \fIf_directory_recurse_dos_delete_callback\fP(3), \fIf_directory_recurse_dos_destroy_callback\fP(3), \fIf_directory_recurse_doss_delete_callback\fP(3), \fIf_directory_recurse_doss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_do_destroy.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_do_destroy.3
new file mode 100644 (file)
index 0000000..fee70a0
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_directory_recurse_do_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_recurse_do_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <recurse_do.h>
+.sp
+\fBf_status_t f_directory_recurse_do_destroy\fP(
+    \fBf_directory_recurse_do_t *const \fP\fIrecurse\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy all non-pointer based dynamic arrays within the recurse.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B recurse
+The recurse to fully destroy.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrecurse_do.h\fP(3), \fIf_directory_recurse_do_delete\fP(3), \fIf_directory_recurse_do_destroy\fP(3), \fIf_directory_recurse_dos_delete_callback\fP(3), \fIf_directory_recurse_dos_destroy_callback\fP(3), \fIf_directory_recurse_doss_delete_callback\fP(3), \fIf_directory_recurse_doss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_dos_delete_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_dos_delete_callback.3
new file mode 100644 (file)
index 0000000..5777d80
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_recurse_dos_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_recurse_dos_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <recurse_do.h>
+.sp
+\fBf_status_t f_directory_recurse_dos_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_directory_recurse_dos_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrecurse_do.h\fP(3), \fIf_directory_recurse_do_delete\fP(3), \fIf_directory_recurse_do_destroy\fP(3), \fIf_directory_recurse_dos_delete_callback\fP(3), \fIf_directory_recurse_dos_destroy_callback\fP(3), \fIf_directory_recurse_doss_delete_callback\fP(3), \fIf_directory_recurse_doss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_dos_destroy_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_dos_destroy_callback.3
new file mode 100644 (file)
index 0000000..26d3194
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_recurse_dos_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_recurse_dos_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <recurse_do.h>
+.sp
+\fBf_status_t f_directory_recurse_dos_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_directory_recurse_dos_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrecurse_do.h\fP(3), \fIf_directory_recurse_do_delete\fP(3), \fIf_directory_recurse_do_destroy\fP(3), \fIf_directory_recurse_dos_delete_callback\fP(3), \fIf_directory_recurse_dos_destroy_callback\fP(3), \fIf_directory_recurse_doss_delete_callback\fP(3), \fIf_directory_recurse_doss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_doss_delete_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_doss_delete_callback.3
new file mode 100644 (file)
index 0000000..1baaf3b
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_recurse_doss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_recurse_doss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <recurse_do.h>
+.sp
+\fBf_status_t f_directory_recurse_doss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_directory_recurse_doss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrecurse_do.h\fP(3), \fIf_directory_recurse_do_delete\fP(3), \fIf_directory_recurse_do_destroy\fP(3), \fIf_directory_recurse_dos_delete_callback\fP(3), \fIf_directory_recurse_dos_destroy_callback\fP(3), \fIf_directory_recurse_doss_delete_callback\fP(3), \fIf_directory_recurse_doss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_doss_destroy_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_recurse_doss_destroy_callback.3
new file mode 100644 (file)
index 0000000..3086180
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_recurse_doss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_recurse_doss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <recurse_do.h>
+.sp
+\fBf_status_t f_directory_recurse_doss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_directory_recurse_doss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrecurse_do.h\fP(3), \fIf_directory_recurse_do_delete\fP(3), \fIf_directory_recurse_do_destroy\fP(3), \fIf_directory_recurse_dos_delete_callback\fP(3), \fIf_directory_recurse_dos_destroy_callback\fP(3), \fIf_directory_recurse_doss_delete_callback\fP(3), \fIf_directory_recurse_doss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_remove.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_remove.3
new file mode 100644 (file)
index 0000000..57957c4
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_directory_remove "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_remove \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_remove\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIdepth_max\fP,
+    \fBconst uint8_t           \fP\fIpreserve\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Remove a directory and possibly its contents.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file is busy. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_empty_not (with error bit) if the directory is not empty. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_found_not (with error bit) if file not found. F_file_open_max (with error bit) too many open files. F_file_type_directory (with error bit) file is a directory (directories cannot be removed via this function). F_input_output (with error bit) if an I/O error occurred. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B depth_max
+Represents the max recursion depth, set to 0 to disable recursive delete.
+
+.TP
+.B preserve
+When depth_max > 0, this designates whether or not to preserve the directory at path. If TRUE, then only the content within the directory is deleted. If FALSE, then the directory at path and its content are deleted. When depth_max is 0, then this should only be FALSE (setting this to TRUE would be a no-op).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fInftw()\fP, \fIremove()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_remove_custom.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_remove_custom.3
new file mode 100644 (file)
index 0000000..fb33de9
--- /dev/null
@@ -0,0 +1,77 @@
+.TH f_directory_remove_custom "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_remove_custom \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_remove_custom\fP(
+    \fBconst f_string_static_t                                      \fP\fIpath\fP,
+    \fBconst int                                                    \fP\fIdepth_max\fP,
+    \fBconst uint8_t                                                \fP\fIpreserve\fP,
+    \fBint(*)(const char *, const struct stat *, int, struct FTW *) \fP\fIcustom\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Remove a directory and possibly its contents.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file is busy. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_empty_not (with error bit) if the directory is not empty. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_found_not (with error bit) if file not found. F_file_open_max (with error bit) too many open files. F_file_type_directory (with error bit) file is a directory (directories cannot be removed via this function). F_input_output (with error bit) if an I/O error occurred. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B depth_max
+Represents the max recursion depth, set to 0 to disable recursive delete.
+
+.TP
+.B preserve
+When depth_max > 0, this designates whether or not to preserve the directory at path. If TRUE, then only the content within the directory is deleted. If FALSE, then the directory at path and its content are deleted. When depth_max is 0, then this should only be FALSE (setting this to TRUE would be a no-op).
+
+.TP
+.B custom
+A custom function to pass to nftw() instead of using the internal one. Such as a custom function for verbose printing of removed files.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fInftw()\fP, \fIremove()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_statuss_delete_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_statuss_delete_callback.3
new file mode 100644 (file)
index 0000000..0c91ae3
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_statuss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_statuss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <status.h>
+.sp
+\fBf_status_t f_directory_statuss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_directory_statuss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus.h\fP(3), \fIf_directory_statuss_delete_callback\fP(3), \fIf_directory_statuss_destroy_callback\fP(3), \fIf_directory_statusss_delete_callback\fP(3), \fIf_directory_statusss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_statuss_destroy_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_statuss_destroy_callback.3
new file mode 100644 (file)
index 0000000..cc90e1b
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_statuss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_statuss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <status.h>
+.sp
+\fBf_status_t f_directory_statuss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_directory_statuss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus.h\fP(3), \fIf_directory_statuss_delete_callback\fP(3), \fIf_directory_statuss_destroy_callback\fP(3), \fIf_directory_statusss_delete_callback\fP(3), \fIf_directory_statusss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_statusss_delete_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_statusss_delete_callback.3
new file mode 100644 (file)
index 0000000..82aba9e
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_statusss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_statusss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <status.h>
+.sp
+\fBf_status_t f_directory_statusss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_directory_statusss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus.h\fP(3), \fIf_directory_statuss_delete_callback\fP(3), \fIf_directory_statuss_destroy_callback\fP(3), \fIf_directory_statusss_delete_callback\fP(3), \fIf_directory_statusss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_statusss_destroy_callback.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_statusss_destroy_callback.3
new file mode 100644 (file)
index 0000000..8b69860
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_directory_statusss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_statusss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <status.h>
+.sp
+\fBf_status_t f_directory_statusss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_directory_statusss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus.h\fP(3), \fIf_directory_statuss_delete_callback\fP(3), \fIf_directory_statuss_destroy_callback\fP(3), \fIf_directory_statusss_delete_callback\fP(3), \fIf_directory_statusss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_close.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_close.3
new file mode 100644 (file)
index 0000000..69584ac
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_directory_stream_close "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_close \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_close\fP(
+    \fBconst f_directory_stream_t \fP\fIstream\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Close an open directory stream.
+.PP
+F_directory_descriptor_not (with error bit) for bad directory descriptor. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stream
+The directory stream to close.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIclosedir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_open.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_open.3
new file mode 100644 (file)
index 0000000..05962ad
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_directory_stream_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_open \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_open\fP(
+    \fBconst f_string_static_t     \fP\fIpath\fP,
+    \fBf_directory_stream_t *const \fP\fIstream\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open the directory stream specified by the directory file descriptor.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) for bad directory descriptor. F_directory_found_not (with error bit) if directory was not found. F_directory_not (with error bit) file is not a directory. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B stream
+The directory stream.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIfdopendir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_open_id.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_open_id.3
new file mode 100644 (file)
index 0000000..33fcaa1
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_directory_stream_open_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_open_id \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_open_id\fP(
+    \fBconst int                   \fP\fIid\fP,
+    \fBf_directory_stream_t *const \fP\fIstream\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open the directory stream specified by the directory file descriptor.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) for bad directory descriptor. F_directory_found_not (with error bit) if directory was not found. F_directory_not (with error bit) file is not a directory. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The directory file descriptor of the directory to open the stream of.
+
+.TP
+.B stream
+The directory stream.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIfdopendir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_read.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_read.3
new file mode 100644 (file)
index 0000000..f308c8c
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_directory_stream_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_read \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_read\fP(
+    \fBconst f_directory_stream_t  \fP\fIstream\fP,
+    \fBf_directory_entity_t *const \fP\fIentity\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a directory stream.
+.PP
+Must not be NULL.
+.PP
+F_directory_descriptor_not (with error bit) for bad directory descriptor. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stream
+The directory stream.
+
+.TP
+.B entity
+A pointer to the statically allocated entity loaded from the stream.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success and the end of the stream is reached (the entity value will be NULL).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIreaddir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_rewind.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_rewind.3
new file mode 100644 (file)
index 0000000..596b698
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_directory_stream_rewind "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_rewind \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_rewind\fP(
+    \fBconst f_directory_stream_t \fP\fIstream\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset the directory stream to the start of the stream.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stream
+The directory stream.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIrewinddir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_seek.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_seek.3
new file mode 100644 (file)
index 0000000..de7b365
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_directory_stream_seek "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_seek \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_seek\fP(
+    \fBconst f_directory_stream_t \fP\fIstream\fP,
+    \fBconst long                 \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek to a given position in the directory stream.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stream
+The directory stream.
+
+.TP
+.B to
+The position to seek to.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIseekdir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_stream_tell.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_stream_tell.3
new file mode 100644 (file)
index 0000000..574e1d3
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_directory_stream_tell "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_stream_tell \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_stream_tell\fP(
+    \fBconst f_directory_stream_t \fP\fIstream\fP,
+    \fBlong *const                \fP\fIat\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current location of a directory stream.
+.PP
+Must not be NULL.
+.PP
+F_directory_descriptor_not (with error bit) for bad directory descriptor. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stream
+The directory stream.
+
+.TP
+.B at
+The location in which the stream is at.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fItelldir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_touch.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_touch.3
new file mode 100644 (file)
index 0000000..4756ead
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_directory_touch "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_touch \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_touch\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Update the files access and modification timestamp, creating the directory if it does not already exist.
+.PP
+When the file is created, it is created as a directory file.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_found (with error bit) if a file aleady exists at the path. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_file_system_quota_reached (with error bit) quota reached of file system is out of space. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_search (with error bit) if search permission is denied for one of the paths to the file. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to use when (directory) file is created.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIutimensat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_directory/data/documentation/man/man3/f_directory_touch_at.3 b/level_0/f_directory/data/documentation/man/man3/f_directory_touch_at.3
new file mode 100644 (file)
index 0000000..52a6e1c
--- /dev/null
@@ -0,0 +1,79 @@
+.TH f_directory_touch_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_directory_touch_at \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t f_directory_touch_at\fP(
+    \fBconst int               \fP\fIat_id\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Update the files access and modification timestamp, creating the file if it does not already exist.
+.PP
+When the file is created, it is created as a directory file.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_found (with error bit) if a file aleady exists at the path (when calling utimensat()). F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_file_system_quota_reached (with error bit) quota reached of file system is out of space. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_search (with error bit) if search permission is denied for one of the paths to the file. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B at_id
+The parent directory, as an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to use when (directory) file is created.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIf_directory_create\fP(3), \fIf_directory_create_at\fP(3), \fIf_directory_empty\fP(3), \fIf_directory_exists\fP(3), \fIf_directory_exists_at\fP(3), \fIf_directory_is\fP(3), \fIf_directory_is_at\fP(3), \fIf_directory_list\fP(3), \fIf_directory_open\fP(3), \fIf_directory_open_at\fP(3), \fIf_directory_remove\fP(3), \fIf_directory_remove_custom\fP(3), \fIf_directory_stream_close\fP(3), \fIf_directory_stream_open\fP(3), \fIf_directory_stream_open_id\fP(3), \fIf_directory_stream_read\fP(3), \fIf_directory_stream_rewind\fP(3), \fIf_directory_stream_seek\fP(3), \fIf_directory_stream_tell\fP(3), \fIf_directory_touch\fP(3), \fIf_directory_touch_at\fP(3), \fIutimensat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_clear.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_clear.3
new file mode 100644 (file)
index 0000000..e6abe98
--- /dev/null
@@ -0,0 +1,29 @@
+.TH f_environment_clear "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_clear \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_clear\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete all environment variables.
+.SH RETURN VALUE
+.PP
+F_okay on success. F_failure (with error bit) on failure.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIclearenv()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_exists.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_exists.3
new file mode 100644 (file)
index 0000000..23116b1
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_environment_exists "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_exists\fP(
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a single environment variable.
+.PP
+The variable is copied into a new dynamically allocated string and is safe to alter.
+.SH PARAMETERS
+.TP
+.B name
+The name of the environment variable to check the existence of. The name string must not contain the '=' character. The name must be NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_data_not if name.used is 0. F_true on success and environment variable exists. F_false on success and environment variable does not exist.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIgetenv()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_get.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_get.3
new file mode 100644 (file)
index 0000000..538c9fa
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_environment_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_get \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_get\fP(
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBf_string_dynamic_t *const \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a single environment variable.
+.PP
+The variable is copied into a new dynamically allocated string and is safe to alter.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B name
+The name of the environment variable to get. The name string must not contain the '=' character. The name must be NULL terminated.
+
+.TP
+.B value
+The value associated with name. The value is be null terminated. The value is be appended (set value->used to 0 before calling this to fully replace).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if name.used is 0. F_exist_not if name does not exist.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIf_memory_array_increase_by()\fP, \fIgetenv()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_get_all.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_get_all.3
new file mode 100644 (file)
index 0000000..deb8b80
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_environment_get_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_get_all \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_get_all\fP(
+    \fBf_string_maps_t *const \fP\fIenvironment\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get all environment variables.
+.PP
+The variables are copied into a new dynamically allocated map and is safe to alter.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_maps_append().
+.SH PARAMETERS
+.TP
+.B environment
+An array of maps containing all available environment variable name and value pairs.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIf_string_maps_append()\fP, \fIf_string_maps_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_secure_is.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_secure_is.3
new file mode 100644 (file)
index 0000000..09a1d19
--- /dev/null
@@ -0,0 +1,39 @@
+.TH f_environment_secure_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_secure_is \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_secure_is\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the environment is secure for calling getenv() safely for "secure execution".
+.PP
+This is intended to closely mimic the checks secure_getenv().
+.PP
+The process has the effective CAP_SETUID set.
+.PP
+The documentation for secure_getenv() is unclear on which capabilities are expected to be set. This takes a conservative approach and only returns true for the above mentioned capabilities.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if name is an invalid string. F_prohibited (with error bit) if the file system does not permit this operation (usually due to the cap_get_proc() call).
+.PP
+F_failure (with error bit) on any other error.
+.SH RETURN VALUE
+.PP
+F_true if the environment is secure according to the described rules. F_false if the environment is not secure according to the described rules.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIcap_get_flag()\fP, \fIcap_get_proc()\fP, \fIgetegid()\fP, \fIgeteuid()\fP, \fIgetgid()\fP, \fIgetuid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_set.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_set.3
new file mode 100644 (file)
index 0000000..204314f
--- /dev/null
@@ -0,0 +1,101 @@
+.TH f_environment_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_set \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_set\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP,
+    \fBconst uint8_t           \fP\fIreplace\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Assign the given value to the named environment variable.
+.PP
+If the name does not exist, then it is created.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if name is an invalid string.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The name of the environment variable to set. The name string must not contain the '=' character. The name must be NULL terminated.
+
+.TP
+.B value
+The value to assign to name. The name must be NULL terminated.
+
+.TP
+.B replace
+Set to TRUE to replace value if name already exists. Set to FALSE to not replace value if name already exists.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if name.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIsetenv()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_environment/data/documentation/man/man3/f_environment_unset.3 b/level_0/f_environment/data/documentation/man/man3/f_environment_unset.3
new file mode 100644 (file)
index 0000000..1d067b7
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_environment_unset "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_environment_unset \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t f_environment_unset\fP(
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Remove the name environment variable.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if name is an invalid string.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The name of the environment variable to remove. The name string must not contain the '=' character. The name must be NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if name.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIf_environment_clear\fP(3), \fIf_environment_exists\fP(3), \fIf_environment_get\fP(3), \fIf_environment_get_all\fP(3), \fIf_environment_secure_is\fP(3), \fIf_environment_set\fP(3), \fIf_environment_unset\fP(3), \fIunsetenv()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_execute/data/documentation/man/man3/f_execute_status_from_status.3 b/level_0/f_execute/data/documentation/man/man3/f_execute_status_from_status.3
new file mode 100644 (file)
index 0000000..3b9f033
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_execute_status_from_status "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_execute_status_from_status \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBuint8_t f_execute_status_from_status\fP(
+    \fBf_status_t \fP\fIstatus\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from F_status_t to execute status.
+.PP
+F_execute_code_last is returned when there are no matching execute states.
+.SH PARAMETERS
+.TP
+.B status
+The status to convert from. The execute status does not support flags and so flags on this are ignored.
+
+.SH RETURN VALUE
+.PP
+The appropriate execute status code is returned on match.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIf_execute_status_from_status\fP(3), \fIf_execute_status_to_status\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_execute/data/documentation/man/man3/f_execute_status_to_status.3 b/level_0/f_execute/data/documentation/man/man3/f_execute_status_to_status.3
new file mode 100644 (file)
index 0000000..1a2e449
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_execute_status_to_status "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_execute_status_to_status \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t f_execute_status_to_status\fP(
+    \fBuint8_t  \fP\fIstatus\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert execute status to F_status_t.
+.PP
+F_known_not (with error bit) if the given number has no known execute state to convert.
+.SH PARAMETERS
+.TP
+.B status
+An execute status number to convert. The execute status has no flags and is only 8-bits wide.
+
+.SH RETURN VALUE
+.PP
+The appropriate status code is returned on match (no bits, error or otherwise are set).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIf_execute_status_from_status\fP(3), \fIf_execute_status_to_status\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_access.3 b/level_0/f_file/data/documentation/man/man3/f_file_access.3
new file mode 100644 (file)
index 0000000..8966de4
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_file_access "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_access \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_access\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check if a file can be accessed.
+.PP
+Do not use this to check file access before immediately attempting to open a file due to the possibility that the permissions change between this call and the open call. Instead, use the f_file_open() directly.
+.PP
+The access() method always follows symbolic links, so if a symbolic link itself needs to be checked, instead use f_file_access_at() with the AT_SYMLINK_NOFOLLOW flag.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) the file does not exist. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) for any other failure.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to check access of.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if requested access is allowed. F_false if requested access is denied. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_open()\fP, \fIf_file_access_at()\fP, \fIaccess()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_access_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_access_at.3
new file mode 100644 (file)
index 0000000..3f4d0c9
--- /dev/null
@@ -0,0 +1,102 @@
+.TH f_file_access_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_access_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_access_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fImode\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check if a file can be accessed.
+.PP
+Do not use this to check file access before immediately attempting to open a file due to the possibility that the permissions change between this call and the open call. Instead, use the f_file_open() directly.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) the file does not exist. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) for any other failure.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to check access of.
+
+.TP
+.B flag
+Options to control how this operates.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if requested access is allowed. F_false if requested access is denied. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_open()\fP, \fIfaccessat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_clone.3 b/level_0/f_file/data/documentation/man/man3/f_file_clone.3
new file mode 100644 (file)
index 0000000..cf19d45
--- /dev/null
@@ -0,0 +1,112 @@
+.TH f_file_clone "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_clone \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_clone\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_string_static_t   \fP\fIdestination\fP,
+    \fBconst f_number_unsigned_t \fP\fIsize_block\fP,
+    \fBconst uint8_t             \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy a file, as well as its file mode and possibly the owner and group.
+.PP
+The paths must not contain NULL except for the terminating NULL. The paths must be NULL terminated.
+.PP
+For directory file types, this will only copy the directory itself and not its contents.
+.PP
+This does not copy unknown file types.
+.PP
+If f_file_stat_flag_reference_e, will operate directly on a link rather than what it references. If not f_file_stat_flag_reference_e, will dereference any links.
+.PP
+If either f_file_stat_flag_group_e or f_file_stat_flag_owner_e, will copy the owner and group ids. If neither f_file_stat_flag_group_e nor f_file_stat_flag_owner_e, will not copy the owner and group ids.
+.PP
+F_access_denied (with error bit) on access denied. F_access_group (with error bit) if the current user does not have access to assign the specified group. F_access_mode (with error bit) if the current user does not have access to assign the file mode. F_access_owner (with error bit) if the current user does not have access to assign the specified owner. F_busy (with error bit) if file system is too busy to perform write. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_read (with error bit) on file read error. F_file_write (with error bit) on file write error. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not if copying a given type of file is unsupported. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B source
+The path to the file to copy from.
+
+.TP
+.B destination
+The path to copy to.
+
+.TP
+.B size_block
+The default number of chunks to read at a time with each chunk being 1-byte. Set to 0 to use default block read size.
+
+.TP
+.B flag
+If f_file_stat_flag_exclusive_e, will fail when file already exists. If not f_file_stat_flag_exclusive_e, will not fail if file already exists (existing file will be replaced).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source.used or destination.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_close.3 b/level_0/f_file/data/documentation/man/man3/f_file_close.3
new file mode 100644 (file)
index 0000000..251a486
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_file_close "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_close \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_close\fP(
+    \fBf_file_t *const \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Close an open file.
+.PP
+Will not flush before closing.
+.PP
+F_file_close (with error bit) if fclose() failed for any other reason. F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_synchronize (with error bit) on flush failure. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_space_not (with error bit) if file system is out of space (or file system quota is reached).
+.SH PARAMETERS
+.TP
+.B file
+The file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfclose()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_close_id.3 b/level_0/f_file/data/documentation/man/man3/f_file_close_id.3
new file mode 100644 (file)
index 0000000..2a3e036
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_file_close_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_close_id \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_close_id\fP(
+    \fBint *const \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Close an open file directly by the file descriptor.
+.PP
+Will not flush before closing.
+.PP
+F_file_close (with error bit) if fclose() failed for any other reason. F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_synchronize (with error bit) on flush failure. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_space_not (with error bit) if file system is out of space (or file system quota is reached).
+.SH PARAMETERS
+.TP
+.B id
+The file descriptor.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfclose()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_copy.3 b/level_0/f_file/data/documentation/man/man3/f_file_copy.3
new file mode 100644 (file)
index 0000000..2e537a4
--- /dev/null
@@ -0,0 +1,141 @@
+.TH f_file_copy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_copy\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_string_static_t   \fP\fIdestination\fP,
+    \fBconst f_mode_t            \fP\fImode\fP,
+    \fBconst f_number_unsigned_t \fP\fIsize_block\fP,
+    \fBconst uint8_t             \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy a file.
+.PP
+The paths must not contain NULL except for the terminating NULL. The paths must be NULL terminated.
+.PP
+For directory file types, this will only copy the directory itself and not its contents.
+.PP
+This does not copy unknown file types.
+.PP
+This does not set mode based on umask(), be sure to apply umask if so desired. (such as: mode & ~mask).
+.PP
+If f_file_stat_flag_reference_e, will operate directly on a link rather than what it references. If not f_file_stat_flag_reference_e, will dereference any links.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file system is too busy to perform write. F_directory (with error bit) if either path is a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_read (with error bit) on file read error. F_file_write (with error bit) on file write error. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not if copying a given type of file is unsupported. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B source
+The path to the file to copy from.
+
+.TP
+.B destination
+The path to copy to.
+
+.TP
+.B mode
+The file mode assigned to the destination file, based on the file type.
+
+.TP
+.B size_block
+The default number of chunks to read at a time with each chunk being 1-byte. Set to 0 to use default block read size.
+
+.TP
+.B flag
+If f_file_stat_flag_exclusive_e, will fail when file already exists. If not f_file_stat_flag_exclusive_e, will not fail if file already exists (existing file will be replaced).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source.used or destination.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create.3 b/level_0/f_file/data/documentation/man/man3/f_file_create.3
new file mode 100644 (file)
index 0000000..03ae296
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst uint8_t           \fP\fIexclusive\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a (regular) file based on the given path and file mode.
+.PP
+The file will not be open after calling this.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file system is too busy to perform write. F_directory (with error bit) if the path is a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to open in.
+
+.TP
+.B exclusive
+If TRUE, will fail when file already exists. If FALSE, will not fail if file already exists.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIopen()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_at.3
new file mode 100644 (file)
index 0000000..fb8495f
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_file_create_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst uint8_t           \fP\fIexclusive\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a (regular) file based on the given path and file mode.
+.PP
+The file will not be open after calling this.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file system is too busy to perform write. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to open in.
+
+.TP
+.B exclusive
+If TRUE, will fail when file already exists. If FALSE, will not fail if file already exists.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIopenat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_device.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_device.3
new file mode 100644 (file)
index 0000000..f0dce90
--- /dev/null
@@ -0,0 +1,79 @@
+.TH f_file_create_device "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_device \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_device\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst unsigned int      \fP\fImajor\fP,
+    \fBconst unsigned int      \fP\fIminor\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a device node based on the given path and file mode.
+.PP
+Warning: Due to the current status of POSIX and LINUX in regards to major and minor devices, this utilizes the non-POSI makedev() function.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) for unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to assign.
+
+.TP
+.B major
+The major device number for character and block file types. Is ignored by pipe file types.
+
+.TP
+.B minor
+The minor device number for character and block file types. Is ignored by pipe file types.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fImakedev()\fP, \fImknod()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_device_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_device_at.3
new file mode 100644 (file)
index 0000000..861c747
--- /dev/null
@@ -0,0 +1,105 @@
+.TH f_file_create_device_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_device_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_device_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst unsigned int      \fP\fImajor\fP,
+    \fBconst unsigned int      \fP\fIminor\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a device node based on the given path and file mode.
+.PP
+Warning: Due to the current status of POSIX and LINUX in regards to major and minor devices, this utilizes the non-POSI makedev() function.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) for unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to assign.
+
+.TP
+.B major
+The major device number for character and block file types. Is ignored by pipe file types.
+
+.TP
+.B minor
+The minor device number for character and block file types. Is ignored by pipe file types.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fImakedev()\fP, \fImknodat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_fifo.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_fifo.3
new file mode 100644 (file)
index 0000000..8c6e3a6
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_file_create_fifo "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_fifo \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_fifo\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a fifo based on the given path and file mode.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_system_quota_block (with error bit) if file system's disk blocks or ififos are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) for unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to assign.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fImkfifo()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_fifo_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_fifo_at.3
new file mode 100644 (file)
index 0000000..903c443
--- /dev/null
@@ -0,0 +1,93 @@
+.TH f_file_create_fifo_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_fifo_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_fifo_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a fifo based on the given path and file mode.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_system_quota_block (with error bit) if file system's disk blocks or ififos are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) for unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to assign.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fImkfifoat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_node.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_node.3
new file mode 100644 (file)
index 0000000..f4a4db1
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_file_create_node "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_node \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_node\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst dev_t             \fP\fIdevice\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a node based on the given path and file mode.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) for unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to assign.
+
+.TP
+.B device
+The device number for character and block file types. Is ignored by pipe file types.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fImknod()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_create_node_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_create_node_at.3
new file mode 100644 (file)
index 0000000..45d043e
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_file_create_node_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_create_node_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_create_node_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst dev_t             \fP\fIdevice\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a node based on the given path and file mode.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file was found while exclusive is TRUE. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error. F_support_not (with error bit) for unsupported file types.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to assign.
+
+.TP
+.B device
+The device number for character and block file types. Is ignored by pipe file types.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fImknodat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_descriptor.3 b/level_0/f_file/data/documentation/man/man3/f_file_descriptor.3
new file mode 100644 (file)
index 0000000..3845930
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_file_descriptor "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_descriptor \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_descriptor\fP(
+    \fBf_file_t *const \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify the file descriptor of a valid file stream.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_stream_not (with error bit) if file is not a valid stream.
+.SH PARAMETERS
+.TP
+.B file
+The file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfileno()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_exists.3 b/level_0/f_file/data/documentation/man/man3/f_file_exists.3
new file mode 100644 (file)
index 0000000..c082e7a
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_file_exists "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_exists\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path.
+.PP
+This does not require access on the file itself. This only requires access via the parent directories in the path.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks. Set to FALSE to operate on the symlink itself.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found. F_false if path was not found. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIlstat()\fP, \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_exists_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_exists_at.3
new file mode 100644 (file)
index 0000000..982b380
--- /dev/null
@@ -0,0 +1,95 @@
+.TH f_file_exists_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_exists_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_exists_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path.
+.PP
+This does not require access on the file itself. This only requires access via the parent directories in the path.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_false (with error bit) on unknown/unhandled errors. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if file exists. F_false if file does not exist. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_flush.3 b/level_0/f_file/data/documentation/man/man3/f_file_flush.3
new file mode 100644 (file)
index 0000000..5f9f7df
--- /dev/null
@@ -0,0 +1,53 @@
+.TH f_file_flush "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_flush \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_flush\fP(
+    \fBconst f_file_t \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Flush the file.
+.PP
+F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_input_output (with error bit) on I/O error. F_parameter (with error bit) if a parameter is invalid. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) if the file system or file type does not support flushing. F_failure (with error bit) on any other error.
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfsync()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_group_read.3 b/level_0/f_file/data/documentation/man/man3/f_file_group_read.3
new file mode 100644 (file)
index 0000000..c0b45bc
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_file_group_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_group_read \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_group_read\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBf_uid_t *const          \fP\fIgroup\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current group of a file.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B group
+The id of the file's group.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_is.3 b/level_0/f_file/data/documentation/man/man3/f_file_is.3
new file mode 100644 (file)
index 0000000..d260123
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_is \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_is\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fItype\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path and if that file is a specific type.
+.PP
+This does not require access on the file itself. This only requires access via the parent directories in the path.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B type
+The type of the file.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is type. F_false if path was found and path is not type. F_data_not if path.used is 0. F_file_found_not if the path was not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_is_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_is_at.3
new file mode 100644 (file)
index 0000000..8917e7d
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_file_is_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_is_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_is_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fItype\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path within the parent directory and if that file is a specific type.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B type
+The type of the file.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is type. F_false if path was found and path is not type. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1. F_file_found_not if the path was not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_is_stat.3 b/level_0/f_file/data/documentation/man/man3/f_file_is_stat.3
new file mode 100644 (file)
index 0000000..c5d5af9
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_file_is_stat "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_is_stat \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_is_stat\fP(
+    \fBconst struct stat \fP\fIstat_file\fP,
+    \fBconst int         \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a file exists at the given path and if that file is a specific type using the statistics file data.
+.PP
+This does not require access on the file itself. This only requires a populated statistics file structure.
+.SH PARAMETERS
+.TP
+.B stat_file
+The statistics read.
+
+.TP
+.B type
+The type of the file.
+
+.SH RETURN VALUE
+.PP
+F_true if path was found and path is type. F_false if path was found and path is not type.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_link.3 b/level_0/f_file/data/documentation/man/man3/f_file_link.3
new file mode 100644 (file)
index 0000000..37fbf87
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_file_link "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_link \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_link\fP(
+    \fBconst f_string_static_t \fP\fItarget\fP,
+    \fBconst f_string_static_t \fP\fIpoint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a symbolic link to a file.
+.PP
+This will not replace existing files/links. This does not validate the existence of target.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_file_found (with error bit) if a file aleady exists at the path. F_file_found_not (with error bit) if a parent path in point does not exist or is a broken symlink. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B target
+A path that the link points to.
+
+.TP
+.B point
+A path to the link that does the pointing.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if target.used or point.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIsymlink()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_link_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_link_at.3
new file mode 100644 (file)
index 0000000..222946f
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_file_link_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_link_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_link_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fItarget\fP,
+    \fBconst f_string_static_t \fP\fIpoint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a symbolic link to a file.
+.PP
+This will not replace existing files/links. This does not validate the existence of target.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file system is too busy to perform write. F_buffer (with error bit) if the buffer is invalid. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file aleady exists at the path. F_file_found_not (with error bit) if a parent path in point does not exist or is a broken symlink. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B target
+A path that the link points to.
+
+.TP
+.B point
+A path to the link that does the pointing.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if target.used or point.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIsymlinkat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_link_hard.3 b/level_0/f_file/data/documentation/man/man3/f_file_link_hard.3
new file mode 100644 (file)
index 0000000..8aebe46
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_file_link_hard "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_link_hard \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_link_hard\fP(
+    \fBconst f_string_static_t \fP\fItarget\fP,
+    \fBconst f_string_static_t \fP\fIpoint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a hard link to a file.
+.PP
+This will not replace existing files/links.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file aleady exists at the path. F_file_found_not (with error bit) if a parent path in point does not exist or is a broken symlink. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B target
+A path that the link points to.
+
+.TP
+.B point
+A path to the link that does the pointing.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if target.used or point.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIlink()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_link_hard_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_link_hard_at.3
new file mode 100644 (file)
index 0000000..56a7ac3
--- /dev/null
@@ -0,0 +1,151 @@
+.TH f_file_link_hard_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_link_hard_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_link_hard_at\fP(
+    \fBconst f_file_t          \fP\fIfile_target\fP,
+    \fBconst f_file_t          \fP\fIfile_point\fP,
+    \fBconst f_string_static_t \fP\fItarget\fP,
+    \fBconst f_string_static_t \fP\fIpoint\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a hard link to a file.
+.PP
+This will not replace existing files/links.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_descriptor_not (with error bit) when either at_id_target or at_id_point is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_found (with error bit) if a file aleady exists at the path. F_file_found_not (with error bit) if a parent path in point does not exist or is a broken symlink. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file_target
+The parent directory, via an open directory file descriptor, in which target path is relative to.
+
+.TP
+.B file_point
+The parent directory, via an open directory file descriptor, in which point path is relative to.
+
+.TP
+.B target
+A path that the link points to.
+
+.TP
+.B point
+A path to the link that does the pointing.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if target.used or point.used is 0. F_file_descriptor_not if either file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIlinkat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_link_read.3 b/level_0/f_file/data/documentation/man/man3/f_file_link_read.3
new file mode 100644 (file)
index 0000000..47f478d
--- /dev/null
@@ -0,0 +1,76 @@
+.TH f_file_link_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_link_read \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_link_read\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBconst uint8_t             \fP\fIdereference\fP,
+    \fBf_string_dynamic_t *const \fP\fItarget\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the target a given link points to.
+.PP
+This does not require access on the file itself. This only requires access via the parent directories in the path.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found_not (with error bit) if the file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if link target path is too large for string buffer size. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by() Errors (with error bit) from: f_string_dynamic_terminate_after()
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks. Set to FALSE to operate on the symlink itself.
+
+.TP
+.B target
+Will be replaced with the path in which the link points to. Will be NULL terminated with the NULL at target.string[target.used];
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_terminate_after()\fP, \fIlstat()\fP, \fIreadlink()\fP, \fIstat()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_terminate_after()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_link_read_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_link_read_at.3
new file mode 100644 (file)
index 0000000..021d471
--- /dev/null
@@ -0,0 +1,102 @@
+.TH f_file_link_read_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_link_read_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_link_read_at\fP(
+    \fBconst f_file_t            \fP\fIdirectory\fP,
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBconst int                 \fP\fIflag\fP,
+    \fBf_string_dynamic_t *const \fP\fItarget\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the target a given link points to.
+.PP
+This does not require access on the file itself. This only requires access via the parent directories in the path.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found_not (with error bit) if the file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if link target path is too large for string buffer size. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by() Errors (with error bit) from: f_string_dynamic_terminate_after()
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.TP
+.B target
+Will be replaced with the path in which the link points to. Will be NULL terminated with the NULL at target.string[target.used];
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_terminate_after()\fP, \fIfstatat()\fP, \fIreadlinkat()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_terminate_after()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_manipulate.3 b/level_0/f_file/data/documentation/man/man3/f_file_manipulate.3
new file mode 100644 (file)
index 0000000..735dc69
--- /dev/null
@@ -0,0 +1,68 @@
+.TH f_file_manipulate "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_manipulate \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_manipulate\fP(
+    \fBconst f_file_t \fP\fIfile\fP,
+    \fBconst int      \fP\fIcommand\fP,
+    \fBconst long     \fP\fIargument\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Manipulate the file by the file descriptor.
+.PP
+F_access_denied (with error bit) on access denied (due to locks being held by other processes). F_again (with error bit) on operation on file is prohibited (often due to file being memory mapped by another process). F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if system is too busy to perform operation. F_deadlock (with error bit) if operation would cause a deadlock. F_directory_not (with error bit) on invalid directory. F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_lock (with error bit) if failed to lock, such as lock table is full or too many open segments. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if operation is prohibited (maps to EPERM). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The data related to the file containing the file descriptor. The file descriptor is required to be valid.
+
+.TP
+.B command
+The command to perform. See fcntl() for details.
+
+.TP
+.B argument
+An argument associated with the command. See fcntl() for details.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfcntl()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_determine.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_determine.3
new file mode 100644 (file)
index 0000000..d7f2280
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_file_mode_determine "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_determine \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_determine\fP(
+    \fBconst mode_t        \fP\fImode_file\fP,
+    \fBconst f_file_mode_t \fP\fImode_change\fP,
+    \fBconst uint8_t       \fP\fImode_replace\fP,
+    \fBconst uint8_t       \fP\fIdirectory_is\fP,
+    \fBmode_t *const       \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine how the mode should be applied based on different file properties and the given mode properties.
+.PP
+This does not set mode based on umask(), which is already applied if f_file_mode_from_string() was used to create mode_change.
+.PP
+@fixme apparently "u+g" is valid such that the mode from the group (g) is applied to the user (u) mode.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B mode_file
+The mode_t value representing the file's current mode. This is expected to be populated from (struct stat).st_mode.
+
+.TP
+.B mode_change
+The file mode values to change.
+
+.TP
+.B mode_replace
+The modes designated to be replaced instead of simply changed.
+
+.TP
+.B directory_is
+Set to TRUE if the file is a directory, FALSE otherwise.
+
+.TP
+.B mode
+The determined mode.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_mode_from_string()\fP, \fIf_file_mode_from_string()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_from_string.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_from_string.3
new file mode 100644 (file)
index 0000000..fae159e
--- /dev/null
@@ -0,0 +1,105 @@
+.TH f_file_mode_from_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_from_string \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_from_string\fP(
+    \fBconst f_string_static_t \fP\fIcode\fP,
+    \fBconst mode_t            \fP\fIumask\fP,
+    \fBf_file_mode_t *const    \fP\fImode\fP,
+    \fBuint8_t *const          \fP\fIreplace\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the file mode id from a string syntax.
+.PP
+The string syntax is defined as follows: '([ugoa]*[-+=]{0,1}([rwxXst]|[ugo])+([,][ugoa]*[-+=]{0,1}([rwxXst]|[ugo])+)*)|([-+=]{0,1}0*[0-7]{1,4})'.
+.PP
+Such that: 'u' = apply to user. 'g' = apply to group. 'o' = apply to other/world. 'a' = apply to all (user, group, and other/world). '-' = remove the specified modes. '+' = add the specified modes. '=' = overwrite all existing modes with this set. 'r' = read mode. 'w' = write mode. 'x' = execute mode. 'X' = execute mode, only if already executable directory or is file with owner already has executable bit. 's' = set-gid/set-uid mode. 't' = sticky-bit mode. '0' = no mode. '1' = execute mode. '2' = write mode. '3' = execute and write mode. '4' = read mode. '5' = execute and read mode. '6' = read and write mode. '7' = execute, read, and write mode.
+.PP
+When there are 4 digits with a non-zero leading digit (such as 2000 or 002000): '1' = sticky-bit mode. '2' = set-gid mode. '3' = sticky-bit and set-gid mode. '4' = set-uid mode. '5' = sticky-bit and set-uid mode. '6' = set-uid and set-gid mode. '7' = sticky-bit, set-uid, and set-gid mode.
+.PP
+When using digits, each set of 0-7 represents the following: [0]+ = set all bits to 0. [0-7] = apply to other/world. [0-7][0-7] = first ([1-7]) to group and second ([0-7]) to other/world. [0-7][0-7][0-7] = first ([1-7]) to owner, second ([0-7]) to group, and third ([0-7]) to other/world. [0-7][0-7][0-7][0-7] = first ([1-7]) to stick/set-uid/set-gid, second ([0-7]) to owner, third ([0-7]) to owner, and fourth ([0-7]) to other/world.
+.PP
+When using digits, the umask is always ignored. When there is a leading '0' or '=' when using digits, then the special bits should be replaced. Otherwise, the current special bits are intended to be respected (designated by F_file_mode_t_replace_directory_d).
+.PP
+When using non-digits and '+', '-', or '=' are specified without a leading 'a', 'u', 'g', or 'o', then the mode operations should be performed against the current umask. These are designated with the umask hows, such as f_file_mode_how_umask_replace.
+.PP
+This means that "chmod 1 some_directory" would not change the setuid/setgid/sticky bits, however, in practice it does change it!
+.PP
+Considering the behavior, assume that when "=" or a leading "0" is provided, this will change the setuid/setgid/sticky bits, otherwise it preserves those bits for directories.
+.PP
+@fixme the possibilities are a bit extensive and this needs additional review; remove this fixme when this review is completed.
+.PP
+@fixme apparently "u+g" is valid such that the mode from the group (g) is applied to the user (u) mode.
+.PP
+The flags F_file_mode_t_replace_* are used to designate which mask bits are to be replaced. For example F_file_mode_t_replace_owner_d would designate that the owner bits are to be replaced. A value of 0 means that there are no replacements being made.
+.PP
+Replacements replace the entire existing mode values where as "add" and "subtract" add or subtract modes, respectively, to the existing mode values.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_syntax (with error bit) if the string fails to follow the syntax rules.
+.PP
+The parameters how, mode_normal, and mode_executable are all set to 0 on error.
+.SH PARAMETERS
+.TP
+.B code
+A NULL terminated string designating the desired mode, following the above string syntax.
+
+.TP
+.B umask
+The umask to be applied to the file mode, when applicable.
+
+.TP
+.B mode
+The determined mode. This uses bitwise data.
+
+.TP
+.B replace
+(optional) The determined modes that are to be replaced, such as: F_file_mode_t_replace_owner_d. This uses bitwise data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_mode_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_read.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_read.3
new file mode 100644 (file)
index 0000000..f2deefb
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_mode_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_read \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_read\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBmode_t *const           \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current file mode as an f_file_mode_t.
+.PP
+The file mode contains more than the file modes such as read, write, and execute. The file mode also returns the file type. This means that this function must handle dereferencing as needed even if the file is a symbolic link.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks. Set to FALSE to operate on the symlink itself.
+
+.TP
+.B mode
+The read file mode.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_mode_t\fP, \fIlstat()\fP, \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_read_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_read_at.3
new file mode 100644 (file)
index 0000000..c0b6b4e
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_file_mode_read_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_read_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_read_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP,
+    \fBmode_t *const           \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current file mode as an f_file_mode_t.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.TP
+.B mode
+The read file mode.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_mode_t\fP, \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_set.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_set.3
new file mode 100644 (file)
index 0000000..8f60f99
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_file_mode_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_set \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_set\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change mode of a given file at the specified path.
+.PP
+This does not set mode based on umask(), be sure to apply umask if so desired. (such as: mode & ~mask).
+.PP
+F_access_denied (with error bit) on access denied. F_access_mode (with error bit) if the current user does not have access to assign the file mode. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The new mode to use.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIchmod()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_set_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_set_at.3
new file mode 100644 (file)
index 0000000..318c623
--- /dev/null
@@ -0,0 +1,95 @@
+.TH f_file_mode_set_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_set_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_set_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change mode of a given file at the specified path.
+.PP
+This does not set mode based on umask(), be sure to apply umask if so desired. (such as: mode & ~mask).
+.PP
+F_access_denied (with error bit) on access denied. F_access_mode (with error bit) if the current user does not have access to assign the file mode. F_file_found_not (with error bit) if file at path was not found. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The new mode to use.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfchmodat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_mode_to_mode.3 b/level_0/f_file/data/documentation/man/man3/f_file_mode_to_mode.3
new file mode 100644 (file)
index 0000000..bf14310
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_file_mode_to_mode "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_mode_to_mode \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_mode_to_mode\fP(
+    \fBconst f_file_mode_t \fP\fIfrom\fP,
+    \fBmode_t *const       \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert an f_file_mode_t type to a mode_t type.
+.PP
+This essentially converts all "add" codes from an f_file_mode_t to a mode_t, ignoring the "subtract" codes.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B from
+The file mode to convert from.
+
+.TP
+.B to
+The determined mode.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_mode_t\fP, \fIf_file_mode_t\fP, \fIf_file_mode_from_string()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_name_base.3 b/level_0/f_file/data/documentation/man/man3/f_file_name_base.3
new file mode 100644 (file)
index 0000000..0cff8bb
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_file_name_base "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_name_base \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_name_base\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBf_string_dynamic_t *const \fP\fIname_base\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the base name of a file path.
+.PP
+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 string is too large to store in the buffer.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B path
+The path file name. Need not be NULL terminated.
+
+.TP
+.B name_base
+The resulting base name as per basename(). The base name is appended onto this. This is NULL terminated after the name_directory.used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_memory_array_increase_by()\fP, \fIbasename()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_name_directory.3 b/level_0/f_file/data/documentation/man/man3/f_file_name_directory.3
new file mode 100644 (file)
index 0000000..a7e3054
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_file_name_directory "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_name_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_name_directory\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBf_string_dynamic_t *const \fP\fIname_directory\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the directory name of a file path.
+.PP
+This does not consider '.' a directory for the purposes of appending the directory.
+.PP
+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 string is too large to store in the buffer.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_terminate_after().
+.SH PARAMETERS
+.TP
+.B path
+The path file name. Need not be NULL terminated.
+
+.TP
+.B name_directory
+The resulting base name as per dirname(). The directory name is appended onto this. This is NULL terminated after the name_directory.used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_terminate_after()\fP, \fIdirname()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_terminate_after()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_open.3 b/level_0/f_file/data/documentation/man/man3/f_file_open.3
new file mode 100644 (file)
index 0000000..680d159
--- /dev/null
@@ -0,0 +1,95 @@
+.TH f_file_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_open \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_open\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBf_file_t *const         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a particular file and save its stream.
+.PP
+This will open the file as a file descriptor. This does not open a file stream.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory (with error bit) if the path is a directory. F_file_found_not (with error bit) if the file was not found. F_file_open_max (with error bit) when system-wide max open files is reached. F_directory_not (with error bit) if F_NOTIFY was specified and file.id is not a directory. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name is too long. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_support_not (with error bit) fo unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode permission to open in (such as F_file_mode_all_rwx_d).
+
+.TP
+.B file
+The data related to the file being opened. This will be updated with the file descriptor.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIopen()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_open_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_open_at.3
new file mode 100644 (file)
index 0000000..00c4ce4
--- /dev/null
@@ -0,0 +1,121 @@
+.TH f_file_open_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_open_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_open_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBf_file_t *const         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a particular file and save its stream.
+.PP
+This will open the file as a file descriptor. This does not open a file stream.
+.PP
+F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_found_not (with error bit) if the file was not found. F_file_open (with error bit) if the file is already open. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to open in.
+
+.TP
+.B file
+The data related to the file being opened. This will be updated with the file descriptor.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIopenat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_owner_read.3 b/level_0/f_file/data/documentation/man/man3/f_file_owner_read.3
new file mode 100644 (file)
index 0000000..20846e8
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_file_owner_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_owner_read \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_owner_read\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBf_uid_t *const          \fP\fIowner\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current owner of a file.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B owner
+The id of the file's owner.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_poll.3 b/level_0/f_file/data/documentation/man/man3/f_file_poll.3
new file mode 100644 (file)
index 0000000..ab51652
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_file_poll "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_poll \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_poll\fP(
+    \fBconst f_polls_t \fP\fIpolls\fP,
+    \fBconst int       \fP\fItimeout\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform poll on the one of more file descriptors.
+.PP
+This is a general wrapper around poll. For more specialized use cases look at f_signal_read().
+.PP
+This does not check the revent codes in the polls array.
+.PP
+Warning: The max array length for used is limited to nfds_t which might be different from f_number_unsigned_t. The nfds_t is often either an uint32_t or an uint64_t. The f_number_unsigned_t is often an uint64_t.
+.PP
+A value of 0 results in immediate return.
+.PP
+F_buffer (with error bit) if the buffer is invalid. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B polls
+An array of polls representing all file descriptors to poll at once.
+
+.TP
+.B timeout
+The number of milliseconds that the poll will block, waiting for a file descriptor. Once time out is reach, then this will unblock and return.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of pollfd structures.
+.PP
+The macros are defined in type_array.h or type_array_file.h.
+.PP
+If used for functions like poll() (a common use) then the max array length for used is limited to nfds_t which might be different from f_number_unsigned_t. The nfds_t is often either uint32_t or an uint64_t. The f_number_unsigned_t is often an uint64_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_polls_t {
+  f_poll_t           *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if polls.used is 0. F_time_out if time out is reached befoe a signal is received.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_signal_read()\fP, \fIf_number_unsigned_t\fP, \fIf_number_unsigned_t\fP, \fIpoll()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_read.3 b/level_0/f_file/data/documentation/man/man3/f_file_read.3
new file mode 100644 (file)
index 0000000..dc7bcfd
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_file_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_read \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_read\fP(
+    \fBconst f_file_t            \fP\fIfile\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until EOF is reached.
+.PP
+To determine how much was read into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B file
+The file to read.
+
+.TP
+.B buffer
+The buffer the file is being read into. The contents of the file is appended into this buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay_eof on success and EOF was reached. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_memory_array_increase_by()\fP, \fIread()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_read_block.3 b/level_0/f_file/data/documentation/man/man3/f_file_read_block.3
new file mode 100644 (file)
index 0000000..9b02b74
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_file_read_block "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_read_block \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_read_block\fP(
+    \fBconst f_file_t            \fP\fIfile\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until a single block is filled or EOF is reached.
+.PP
+To check how much was read into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read.
+
+.TP
+.B buffer
+The buffer the file is being read into. The contents of the file is appended into this buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof on success and EOF was reached. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIread()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_read_until.3 b/level_0/f_file/data/documentation/man/man3/f_file_read_until.3
new file mode 100644 (file)
index 0000000..e1a129c
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_file_read_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_read_until \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_read_until\fP(
+    \fBconst f_file_t            \fP\fIfile\fP,
+    \fBconst f_number_unsigned_t \fP\fItotal\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until a given number or EOF is reached, storing it in the buffer.
+.PP
+To determine how much was read into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+This is different from simply using the file.size_read. The file.size_read represents the amount to process at a given time. The total represents the maximum number of file.size_read to process. For example, if file.size_read is 16 and total is 128, then this function would need to be called 8 times until total is reached.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read.
+
+.TP
+.B total
+The total bytes to read, unless EOF is reached first.
+
+.TP
+.B buffer
+The buffer the file is being read into.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay_eof on success and EOF was reached. F_okay_stop on success and total was reached. F_data_not if total is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIread()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_remove.3 b/level_0/f_file/data/documentation/man/man3/f_file_remove.3
new file mode 100644 (file)
index 0000000..45aa3e2
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_file_remove "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_remove \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_remove\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Remove a file.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file is busy. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found_not (with error bit) if file not found. F_file_type_directory (with error bit) file is a directory (directories cannot be removed via this function). F_input_output (with error bit) if an I/O error occurred. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIunlink()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_remove_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_remove_at.3
new file mode 100644 (file)
index 0000000..a78f2e6
--- /dev/null
@@ -0,0 +1,93 @@
+.TH f_file_remove_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_remove_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_remove_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Remove a file.
+.PP
+F_access_denied (with error bit) on access denied. F_busy (with error bit) if file is busy. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found_not (with error bit) if file not found. F_file_type_directory (with error bit) file is a directory (directories cannot be removed via this function). F_input_output (with error bit) if an I/O error occurred. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIunlinkat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_rename.3 b/level_0/f_file/data/documentation/man/man3/f_file_rename.3
new file mode 100644 (file)
index 0000000..d99ac90
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_file_rename "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_rename \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_rename\fP(
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Rename a file.
+.PP
+The paths must not contain NULL except for the terminating NULL. The paths must be NULL terminated.
+.PP
+This essentially renames a file but can also change the file's path, which is identical to a move. However, renames only work within a file system and cannot be moved to another file system.
+.PP
+If destination already exists, then according to rename(), destination will be atomically replaced. Which, if destination is a directory, then that directory must either not exist or be empty.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_empty_not (with error bit) if the destination is a non-empty directory. F_file_found_not (with error bit) if file at path was not found. F_file_type_directory (with error bit) if destination is a directory but source is not. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_link (with error bit) if source or destination has the maxiumum associated links. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_mount (with error bit) if source and destination are not within the same mounted file systems. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B source
+The path to the file to copy from.
+
+.TP
+.B destination
+The path to copy to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIrename()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_rename_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_rename_at.3
new file mode 100644 (file)
index 0000000..1cbe3d9
--- /dev/null
@@ -0,0 +1,155 @@
+.TH f_file_rename_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_rename_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_rename_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory_source\fP,
+    \fBconst f_file_t          \fP\fIdirectory_destination\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP,
+    \fBconst unsigned int      \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Rename a file.
+.PP
+The paths must not contain NULL except for the terminating NULL. The paths must be NULL terminated.
+.PP
+This essentially renames a file but can also change the file's path, which is identical to a move. However, renames only work within a file system and cannot be moved to another file system.
+.PP
+If destination already exists, then according to rename(), destination will be atomically replaced. Which, if destination is a directory, then that directory must either not exist or be empty.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_empty_not (with error bit) if the destination is a non-empty directory. F_file_found_not (with error bit) if file at path was not found. F_file_type_directory (with error bit) if destination is a directory but source is not. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_link (with error bit) if source or destination has the maxiumum associated links. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_mount (with error bit) if source and destination are not within the same mounted file systems. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory_source
+The parent directory, via an open directory file descriptor, in which the source path is relative to.
+
+.TP
+.B directory_destination
+The parent directory, via an open directory file descriptor, in which the destination path is relative to.
+
+.TP
+.B source
+The path to the file to copy from.
+
+.TP
+.B destination
+The path to copy to.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d. The POSIX renameat() doesn't support flag but Linux has a renameat2() that does. If this is compiled with renameat2 support (), then flag is used otherwise flag is always 0 regardless of this property.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIrenameat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_role_change.3 b/level_0/f_file/data/documentation/man/man3/f_file_role_change.3
new file mode 100644 (file)
index 0000000..9f1bad4
--- /dev/null
@@ -0,0 +1,77 @@
+.TH f_file_role_change "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_role_change \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_role_change\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_uid_t           \fP\fIuid\fP,
+    \fBconst f_gid_t           \fP\fIgid\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change owner and/or group of a given file at the specified path.
+.PP
+F_access_denied (with error bit) on access denied. F_access_group (with error bit) if the current user does not have access to assign the specified group. F_access_owner (with error bit) if the current user does not have access to assign the specified owner. F_buffer (with error bit) if the buffer is invalid. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B uid
+The new user id to use. Set to -1 to not change.
+
+.TP
+.B gid
+The new group id to use. Set to -1 to not change.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if either both uid and gid are -1 or path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIchown()\fP, \fIlchown()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_role_change_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_role_change_at.3
new file mode 100644 (file)
index 0000000..cbb1225
--- /dev/null
@@ -0,0 +1,103 @@
+.TH f_file_role_change_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_role_change_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_role_change_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_uid_t           \fP\fIuid\fP,
+    \fBconst f_gid_t           \fP\fIgid\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change owner and/or group of a given file at the specified path.
+.PP
+F_access_denied (with error bit) on access denied. F_access_group (with error bit) if the current user does not have access to assign the specified group. F_access_owner (with error bit) if the current user does not have access to assign the specified owner. F_buffer (with error bit) if the buffer is invalid. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B uid
+The new user id to use. Set to -1 to not change.
+
+.TP
+.B gid
+The new group id to use. Set to -1 to not change.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if either both uid and gid are -1 or path.used is 0. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfchownat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_seek.3 b/level_0/f_file/data/documentation/man/man3/f_file_seek.3
new file mode 100644 (file)
index 0000000..5445e96
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_file_seek "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_seek \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_seek\fP(
+    \fBconst f_file_t \fP\fIfile\fP,
+    \fBconst int      \fP\fIwhence\fP,
+    \fBconst off_t    \fP\fIoffset\fP,
+    \fBoff_t *const   \fP\fIseeked\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given an open file descriptor, seek to a given location.
+.PP
+F_bound_not (with error bit) if SEEK_DATA or SEEK_HOLE is specified as whence and offset is beyond the end of file. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_pipe (with error bit) if file descriptor represents a pipe, socket, or FIFO. F_number_overflow (with error bit) on overflow for offset. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file.
+
+.TP
+.B whence
+One of: SEEK_SET, SEEK_CUR, SEEK_END, SEEK_DATA, SEEK_HOLE.
+
+.TP
+.B offset
+The offset to use, based off of whence.
+
+.TP
+.B seeked
+This gets update to represent the total amount seeked. To be compared against offset.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIlseek()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_select.3 b/level_0/f_file/data/documentation/man/man3/f_file_select.3
new file mode 100644 (file)
index 0000000..04c253b
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_file_select "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_select \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_select\fP(
+    \fBconst int             \fP\fIhighest_plus_one\fP,
+    \fBfd_set *const         \fP\fIread\fP,
+    \fBfd_set *const         \fP\fIwrite\fP,
+    \fBfd_set *const         \fP\fIexcept\fP,
+    \fBstruct timeval *const \fP\fItimeout\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Monitor one or more file descriptors.
+.PP
+Warning: Some libc implementations, such as GLIBC, use an upper limit of 1023 file descriptors. The linux kernel general does not have such a limit. To more safely handle more than 1023 file desciptors, instead consider f_file_poll();
+.PP
+Set to NULL to not use.
+.PP
+F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B highest_plus_one
+
+.TP
+.B read
+(optional) The set of file descriptors for descriptors that become available for reading.
+
+.TP
+.B write
+(optional) The set of file descriptors for descriptors that become available for writing.
+
+.TP
+.B except
+(optional) The set of file descriptors for descriptors that become available for any error conditions.
+
+.TP
+.B timeout
+(optional) The time to wait before returning.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if all of read, write, except, and timeout are NULL (having at least one is required) or when highest_plus_one is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_poll()\fP, \fIselect()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_select_signal.3 b/level_0/f_file/data/documentation/man/man3/f_file_select_signal.3
new file mode 100644 (file)
index 0000000..e63106b
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_file_select_signal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_select_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_select_signal\fP(
+    \fBconst int                  \fP\fIhighest_plus_one\fP,
+    \fBfd_set *const              \fP\fIread\fP,
+    \fBfd_set *const              \fP\fIwrite\fP,
+    \fBfd_set *const              \fP\fIexcept\fP,
+    \fBconst f_time_spec_t *const \fP\fItimeout\fP,
+    \fBconst sigset_t *const      \fP\fIsignal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Monitor one or more file descriptors in a signal safe manner.
+.PP
+Warning: Some libc implementations, such as GLIBC, use an upper limit of 1023 file descriptors. The linux kernel general does not have such a limit. To more safely handle more than 1023 file desciptors, instead consider f_file_poll();
+.PP
+F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B highest_plus_one
+
+.TP
+.B read
+(optional) The set of file descriptors for descriptors that become available for reading.
+
+.TP
+.B write
+(optional) The set of file descriptors for descriptors that become available for writing.
+
+.TP
+.B except
+(optional) The set of file descriptors for descriptors that become available for any error conditions.
+
+.TP
+.B timeout
+(optional) The time to wait before returning.
+
+.TP
+.B signal
+pthread_sigmask(SIG_SETMASK, &origmask, NULL); Set to NULL to not use.
+
+
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if all of read, write, except, and timeout are NULL (having at least one is required) or when highest_plus_one is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_poll()\fP, \fIpselect()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_size.3 b/level_0/f_file/data/documentation/man/man3/f_file_size.3
new file mode 100644 (file)
index 0000000..d320cde
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_file_size "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_size \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_size\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBoff_t *const            \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read the size of file.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path to the file.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B size
+This gets set to the size of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_stat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_size_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_size_at.3
new file mode 100644 (file)
index 0000000..37e9aa1
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_file_size_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_size_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_size_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBoff_t *const            \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read the size of file.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_stat (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path to the file.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B size
+This gets set to the size of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_stat_at()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_size_by_id.3 b/level_0/f_file/data/documentation/man/man3/f_file_size_by_id.3
new file mode 100644 (file)
index 0000000..b45c07b
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_file_size_by_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_size_by_id \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_size_by_id\fP(
+    \fBconst f_file_t \fP\fIfile\fP,
+    \fBoff_t *const   \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read size of a file relative to the path represented by the file descriptor.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_stat (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file.
+
+.TP
+.B size
+This gets set to the size of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIf_file_stat_by_id()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stat.3 b/level_0/f_file/data/documentation/man/man3/f_file_stat.3
new file mode 100644 (file)
index 0000000..81829e5
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_stat "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stat \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_stat\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBstruct stat *const      \fP\fIstat_file\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read statistics of a file.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_stat (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path to the file.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B stat_file
+The statistics read.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stat_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_stat_at.3
new file mode 100644 (file)
index 0000000..b679382
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_file_stat_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stat_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_stat_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP,
+    \fBstruct stat *const      \fP\fIstat_file\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read statistics of a file relative to the path represented by the file descriptor.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_stat (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path to the file.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.TP
+.B stat_file
+The statistics read.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stat_by_id.3 b/level_0/f_file/data/documentation/man/man3/f_file_stat_by_id.3
new file mode 100644 (file)
index 0000000..358c400
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_file_stat_by_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stat_by_id \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_stat_by_id\fP(
+    \fBconst f_file_t     \fP\fIfile\fP,
+    \fBstruct stat *const \fP\fIstat_file\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read statistics of a file using a file descriptor.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if the file was not found. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_stat (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file.
+
+.TP
+.B stat_file
+The statistics read.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_close.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_close.3
new file mode 100644 (file)
index 0000000..282e49d
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_file_stream_close "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_close \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_close\fP(
+    \fBf_file_t *const \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Close an open file stream.
+.PP
+F_access_denied (with error bit) on access denied. F_block (with error bit) if the action would block and non-blocking is set on the stream. F_buffer (with error bit) if the buffer is invalid. F_deadlock (with error bit) if operation would cause a deadlock. F_directory_not (with error bit) if F_NOTIFY was specified and file.id is not a directory. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_overflow (with error bit) if the write exceeds some implementation defined maximum file size. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_lock (with error bit) if failed to lock, such as lock table is full or too many open segments. F_parameter (with error bit) if a parameter is invalid. F_pipe_not (with error bit) if the stream is a pipe or a socket but the pipe or socket is already closed. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_socket_not (with error bit) if the datagram socket in which a peer has not been set (for socket related streams).
+.PP
+F_file_close (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file information. The file.stream is set to NULL, on both success or on failure.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfclose()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_flush.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_flush.3
new file mode 100644 (file)
index 0000000..29b789d
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_file_stream_flush "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_flush \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_flush\fP(
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Flush a file stream.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received.
+.PP
+F_file_synchronize (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file information. The file.id is updated with the file descriptor, if necessary and able.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_stream_not if file.stream is NULL. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfflush()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_lock.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_lock.3
new file mode 100644 (file)
index 0000000..db16510
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_file_stream_lock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_lock \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_lock\fP(
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock a file stream.
+.PP
+As per flockfile(), this waits (blocks) until the file stream is available to lock again.
+.SH PARAMETERS
+.TP
+.B file
+The file to lock.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIflockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_lock_try.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_lock_try.3
new file mode 100644 (file)
index 0000000..9250f1a
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_file_stream_lock_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_lock_try \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_lock_try\fP(
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to lock a file stream.
+.PP
+As per flockfile(), this does not wait (does not block) when the file stream is already locked.
+.SH PARAMETERS
+.TP
+.B file
+The file to lock.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but the file.stream is already locked. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIftrylockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_open.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_open.3
new file mode 100644 (file)
index 0000000..ef154d9
--- /dev/null
@@ -0,0 +1,124 @@
+.TH f_file_stream_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_open \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_open\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_string_static_t \fP\fImode\fP,
+    \fBf_file_t *const         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a file stream.
+.PP
+The file descriptor is retrieved on success, if necessary and able.
+.PP
+If the file stream is open, it is closed before re-opening.
+.PP
+This is often used for changing the file pointed to by standard streams such as stdout.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory (with error bit) if the path is a directory. F_directory_not (with error bit) if F_NOTIFY was specified and file.id is not a directory. F_file_descriptor_not (with error bit) if unable to load the file descriptor. F_file_found_not (with error bit) if the file was not found. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name is too long. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_support_not (with error bit) fo unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path.
+
+.TP
+.B mode
+The file modes do use when opening, as an fopen() file mode string. Set mode.used to 0 to determine mode from file.flags (falling back to read only as a failsafe). If neither truncate nor append are specified in write only mode, then the failsafe is to append.
+
+.TP
+.B file
+The file information. The file.stream is updated if necessary. The file.id is updated with the file descriptor, if necessary and able.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_data_not if both path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfopen()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_open_descriptor.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_open_descriptor.3
new file mode 100644 (file)
index 0000000..3682bfc
--- /dev/null
@@ -0,0 +1,88 @@
+.TH f_file_stream_open_descriptor "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_open_descriptor \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_open_descriptor\fP(
+    \fBconst f_string_static_t \fP\fImode\fP,
+    \fBf_file_t *const         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a file stream from a file descriptor.
+.PP
+F_access_denied (with error bit) on access denied. F_block (with error bit) if the action would block and non-blocking is set on the stream. F_buffer (with error bit) if the buffer is invalid. F_deadlock (with error bit) if operation would cause a deadlock. F_device_not (with error bit) if the device does not exist. F_directory_not (with error bit) if F_NOTIFY was specified and file.id is not a directory. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_descriptor_not (with error bit) if file descriptor is invalid. F_file_overflow (with error bit) if the write exceeds some implementation defined maximum file size. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_lock (with error bit) if failed to lock, such as lock table is full or too many open segments. F_parameter (with error bit) if a parameter is invalid. F_pipe_not (with error bit) if the stream is a pipe or a socket but the pipe or socket is already closed. F_prohibited (with error bit) if file system does not allow for making changes. F_socket_not (with error bit) if socket is not connected. F_space_not (with error bit) if the file system is out of space (or file system quota is reached).
+.SH PARAMETERS
+.TP
+.B mode
+The file modes do use when opening. Set mode.used to 0 to determine mode from file.flags (falling back to read only as a failsafe). If neither truncate nor append are not specified in write only mode, then the failsafe is to append. This should match the modes used to open the file descriptor as it relates to the stream modes.
+
+.TP
+.B file
+The file with a valid file descriptor (file.id).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfdopen()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_read.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_read.3
new file mode 100644 (file)
index 0000000..279ff90
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_file_stream_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_read \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_read\fP(
+    \fBconst f_file_t            \fP\fIfile\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until EOF is reached.
+.PP
+To check how much was read into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_error (with error bit) if the file is already in the error state at the start of this function. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read. The file.size_read represents the amount to process at a given time.
+
+.TP
+.B buffer
+The buffer the file is being read into. The contents of the file is appended into this buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay_eof on success and EOF was reached. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIflockfile()\fP, \fIfeof_unlocked()\fP, \fIferror_unlocked()\fP, \fIfread_unlocked()\fP, \fIfunlockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_read_block.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_read_block.3
new file mode 100644 (file)
index 0000000..3baa89e
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_file_stream_read_block "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_read_block \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_read_block\fP(
+    \fBconst f_file_t            \fP\fIfile\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until a single block is filled or EOF is reached.
+.PP
+To determine how much was read into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+F_error (with error bit) if the file is already in the error state at the start of this function. F_file_closed (with error bit) if the file is closed. F_file_read (with error bit) on file read error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read. The file.size_read represents the amount to process at a given time.
+
+.TP
+.B buffer
+The buffer the file is being read into. The contents of the file is appended into this buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof on success and EOF was reached. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfeof_unlocked()\fP, \fIferror_unlocked()\fP, \fIflockfile()\fP, \fIfread()\fP, \fIfunlockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_read_until.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_read_until.3
new file mode 100644 (file)
index 0000000..1fbd3c1
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_stream_read_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_read_until \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_read_until\fP(
+    \fBconst f_file_t            \fP\fIfile\fP,
+    \fBconst f_number_unsigned_t \fP\fItotal\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until a given number or EOF is reached, storing it in the buffer.
+.PP
+To check how much was read into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+This is different from simply using the file.size_read. The file.size_read represents the amount to process at a given time. The total represents the maximum number of file.size_read to process. For example, if file.size_read is 16 and total is 128, then this function would need to be called 8 times until total is reached.
+.PP
+F_error (with error bit) if the file is already in the error state at the start of this function. F_file_closed (with error bit) if the file is closed. F_file_read (with error bit) on file read error. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B file
+The file to read. The file.size_read represents the amount to process at a given time.
+
+.TP
+.B total
+The total bytes to read, unless EOF is reached first.
+
+.TP
+.B buffer
+The buffer the file is being read into.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay_eof on success and EOF was reached. F_okay_stop on success and total was reached. F_data_not if total is 0. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIf_memory_array_increase_by()\fP, \fIfeof_unlocked()\fP, \fIferror_unlocked()\fP, \fIflockfile()\fP, \fIfread_unlocked()\fP, \fIfunlockfile()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_reopen.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_reopen.3
new file mode 100644 (file)
index 0000000..aebbcad
--- /dev/null
@@ -0,0 +1,122 @@
+.TH f_file_stream_reopen "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_reopen \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_reopen\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_string_static_t \fP\fImode\fP,
+    \fBf_file_t *const         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Re-open a file stream.
+.PP
+This allows for re-using an existing file stream and possibly file-descriptor.
+.PP
+The file descriptor is retrieved on success, if necessary and able.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write F_directory_not (with error bit) if F_NOTIFY was specified and file.id is not a directory.. F_file_descriptor_not (with error bit) if unable to load the file descriptor. F_file_found_not (with error bit) if the file was not found. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name is too long. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for making changes. F_read_only (with error bit) if file is read-only. F_support_not (with error bit) fo unsupported file types. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path. Set path.used to 0 with a non-empty mode (mode.used > 0) to only change the mode of the existing stream.
+
+.TP
+.B mode
+The file modes do use when opening. Set to 0 to determine mode from file.flags (falling back to read only as a failsafe). If neither truncate nor append are not specified in write only mode, then the failsafe is to append.
+
+.TP
+.B file
+The file information. The file.stream is updated, if necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay is returned on success. F_data_not if both path.used and mode.used are 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfileno()\fP, \fIfreopen()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_unlock.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_unlock.3
new file mode 100644 (file)
index 0000000..3b8da2a
--- /dev/null
@@ -0,0 +1,56 @@
+.TH f_file_stream_unlock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_unlock \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_unlock\fP(
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unlock a locked file stream.
+.SH PARAMETERS
+.TP
+.B file
+The file to unlock.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfunlockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_write.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_write.3
new file mode 100644 (file)
index 0000000..b594906
--- /dev/null
@@ -0,0 +1,97 @@
+.TH f_file_stream_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_write \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_write\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until entire buffer is written.
+.PP
+Set to NULL to not use.
+.PP
+F_file_write (with error bit) on error during file write. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_write (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open. The file.size_write represents the amount to process at a given time.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof when the file stream is at the end of the file. F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_data_not on success but buffer.used is 0. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIferror_unlocked()\fP, \fIflockfile()\fP, \fIfwrite_unlocked()\fP, \fIfunlockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_write_block.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_write_block.3
new file mode 100644 (file)
index 0000000..eaf5053
--- /dev/null
@@ -0,0 +1,99 @@
+.TH f_file_stream_write_block "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_write_block \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_write_block\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until a single block is filled or entire buffer is written.
+.PP
+To check how much was write into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+Set to NULL to not use.
+.PP
+F_file_write (with error bit) on error during file write. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_write (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open. The file.size_write represents the amount to process at a given time.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof when the file stream is at the end of the file. F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_data_not on success but buffer.used is 0. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIflockfile()\fP, \fIfwrite_unlocked()\fP, \fIferror_unlocked()\fP, \fIfunlockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_write_range.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_write_range.3
new file mode 100644 (file)
index 0000000..cfbbf8f
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_file_stream_write_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_write_range \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_write_range\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a given range within the buffer.
+.PP
+Set to NULL to not use.
+.PP
+F_file_write (with error bit) on error during file write. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file.size_write represents the amount to process at a given time.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B range
+An inclusive start an stop range within the buffer to read.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_okay_eos on success but range.stop exceeded buffer.used (only wrote up to buffer.used). F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_stream_write_until.3 b/level_0/f_file/data/documentation/man/man3/f_file_stream_write_until.3
new file mode 100644 (file)
index 0000000..a46f1dc
--- /dev/null
@@ -0,0 +1,102 @@
+.TH f_file_stream_write_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_stream_write_until \-
+.SH SYNOPSIS
+.nf
+.B #include <stream.h>
+.sp
+\fBf_status_t f_file_stream_write_until\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigned_t  \fP\fItotal\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until a given number or entire buffer is written.
+.PP
+Set to NULL to not use.
+.PP
+F_file_write (with error bit) on error during file write. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_file_write (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open. The file.size_write represents the amount to process at a given time.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B total
+The total bytes to write, unless end of buffer is reached first.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof when the file stream is at the end of the file. F_okay_eos on success but range.stop exceeded buffer.used (only wrote up to buffer.used). F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_data_not on success but either buffer.used or total is 0. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstream.h\fP(3), \fIf_file_stream_close\fP(3), \fIf_file_stream_flush\fP(3), \fIf_file_stream_lock\fP(3), \fIf_file_stream_lock_try\fP(3), \fIf_file_stream_open\fP(3), \fIf_file_stream_open_descriptor\fP(3), \fIf_file_stream_read\fP(3), \fIf_file_stream_read_block\fP(3), \fIf_file_stream_read_until\fP(3), \fIf_file_stream_reopen\fP(3), \fIf_file_stream_unlock\fP(3), \fIf_file_stream_write\fP(3), \fIf_file_stream_write_block\fP(3), \fIf_file_stream_write_range\fP(3), \fIf_file_stream_write_until\fP(3), \fIflockfile()\fP, \fIfwrite_unlocked()\fP, \fIferror_unlocked()\fP, \fIfunlockfile()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_touch.3 b/level_0/f_file/data/documentation/man/man3/f_file_touch.3
new file mode 100644 (file)
index 0000000..f265e3d
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_touch "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_touch \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_touch\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Update the files access and modification timestamp, creating the file if it does not already exist.
+.PP
+When the file is created, it is created as a regular file.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_found (with error bit) if a file aleady exists at the path. F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_file_system_quota_reached (with error bit) quota reached of file system is out of space. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_search (with error bit) if search permission is denied for one of the paths to the file. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to use when (regular) file is created.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIutimensat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_touch_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_touch_at.3
new file mode 100644 (file)
index 0000000..02afc42
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_file_touch_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_touch_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_touch_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP,
+    \fBconst int               \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Update the files access and modification timestamp, creating the file if it does not already exist.
+.PP
+When the file is created, it is created as a regular file.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_busy (with error bit) if file system is too busy to perform write. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_file_found (with error bit) if a file aleady exists at the path (when calling utimensat()). F_file_open_max (with error bit) when system-wide max open files is reached. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_file_system_quota_reached (with error bit) quota reached of file system is out of space. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for creating or linking. F_read_only (with error bit) if file system is read-only. F_search (with error bit) if search permission is denied for one of the paths to the file. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B mode
+The file mode to use when (regular) file is created.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIutimensat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_type.3 b/level_0/f_file/data/documentation/man/man3/f_file_type.3
new file mode 100644 (file)
index 0000000..839c5f8
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_file_type "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_type \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_type\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIdereference\fP,
+    \fBint *const              \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the file type for the file at the given path.
+.PP
+This does not require access on the file itself. This only requires access via the parent directories in the path.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_not (with error bit) on invalid directory. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B type
+The type of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if path was found and and the type was loaded in the type parameter. F_file_found_not if the path was not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_type_at.3 b/level_0/f_file/data/documentation/man/man3/f_file_type_at.3
new file mode 100644 (file)
index 0000000..3310507
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_file_type_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_type_at \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_type_at\fP(
+    \fBconst f_file_t          \fP\fIdirectory\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflag\fP,
+    \fBint *const              \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the file type for the file at the given path within the parent directory.
+.PP
+F_access_denied (with error bit) if access to the file was denied. F_directory_descriptor_not (with error bit) when at_id is not a valid file descriptor (at_id must point to a directory). F_directory_not (with error bit) on invalid directory. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on overflow error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B directory
+The parent directory, via an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The path file name.
+
+.TP
+.B flag
+Any valid flag, such as F_file_at_path_empty_d, F_file_at_automount_no_d, or F_file_at_symlink_follow_no_d.
+
+.TP
+.B type
+The type of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if path was found and and the type was loaded in the type parameter. F_file_descriptor_not if file.id is -1. F_file_found_not if the path was not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIfstatat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_umask_get.3 b/level_0/f_file/data/documentation/man/man3/f_file_umask_get.3
new file mode 100644 (file)
index 0000000..bbb9ce5
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_file_umask_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_umask_get \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_umask_get\fP(
+    \fBmode_t *const \fP\fImask\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the umask.
+.PP
+This sets the umask after getting the umask. This is necessary because the umask() is poorly designed such that it requires changing the umask to get the current umask. The umask() function gets called twice because of this.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B mask
+The umask value. (The name "mask" is used avoid a naming conflict with the umask() function.)
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIumask()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_umask_set.3 b/level_0/f_file/data/documentation/man/man3/f_file_umask_set.3
new file mode 100644 (file)
index 0000000..f30b314
--- /dev/null
@@ -0,0 +1,34 @@
+.TH f_file_umask_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_umask_set \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_umask_set\fP(
+    \fBconst mode_t \fP\fImask\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the umask.
+.SH PARAMETERS
+.TP
+.B mask
+The umask value to assigned. (The name "mask" is used avoid a naming conflict with the umask() function.)
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_write.3 b/level_0/f_file/data/documentation/man/man3/f_file_write.3
new file mode 100644 (file)
index 0000000..9b7eee0
--- /dev/null
@@ -0,0 +1,95 @@
+.TH f_file_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_write \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_write\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until entire buffer is written.
+.PP
+Set to NULL to not use.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success and wrote up to buffer.used. F_data_not if buffer.used is 0 or range.start > range.stop. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_write_block.3 b/level_0/f_file/data/documentation/man/man3/f_file_write_block.3
new file mode 100644 (file)
index 0000000..10f136a
--- /dev/null
@@ -0,0 +1,97 @@
+.TH f_file_write_block "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_write_block \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_write_block\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until a single block is filled or entire buffer is written.
+.PP
+To check how much was write into the buffer, record buffer->used before execution and compare to buffer->used after execution.
+.PP
+Set to NULL to not use.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success and wrote up to stop point. F_okay_eos on success and wrote up to buffer.used (buffer.used is reached before stop point). F_data_not if buffer.used is 0 or range.start > range.stop. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_write_range.3 b/level_0/f_file/data/documentation/man/man3/f_file_write_range.3
new file mode 100644 (file)
index 0000000..cc17301
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_file_write_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_write_range \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_write_range\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a given range within the buffer.
+.PP
+Set to NULL to not use.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B range
+An inclusive start an stop range within the buffer to read.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success and wrote up to stop point. F_okay_eos on success and wrote up to buffer.used (buffer.used is reached before stop point). F_data_not if buffer.used is 0 or range.start > range.stop. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_file_write_until.3 b/level_0/f_file/data/documentation/man/man3/f_file_write_until.3
new file mode 100644 (file)
index 0000000..afee968
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_file_write_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_file_write_until \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_file_write_until\fP(
+    \fBconst f_file_t             \fP\fIfile\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigned_t  \fP\fItotal\fP,
+    \fBf_number_unsigned_t *const \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until a given number or entire buffer is written.
+.PP
+Set to NULL to not use.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to.
+
+.TP
+.B buffer
+The buffer to write to the file.
+
+.TP
+.B total
+The total bytes to write, unless end of buffer is reached first.
+
+.TP
+.B written
+(optional) The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success and wrote up to stop point. F_okay_eos on success and wrote up to buffer.used (buffer.used is reached before stop point). F_data_not if buffer.used is 0 or range.start > range.stop. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_file_access\fP(3), \fIf_file_access_at\fP(3), \fIf_file_clone\fP(3), \fIf_file_close\fP(3), \fIf_file_close_id\fP(3), \fIf_file_copy\fP(3), \fIf_file_create\fP(3), \fIf_file_create_at\fP(3), \fIf_file_create_device\fP(3), \fIf_file_create_device_at\fP(3), \fIf_file_create_fifo\fP(3), \fIf_file_create_fifo_at\fP(3), \fIf_file_create_node\fP(3), \fIf_file_create_node_at\fP(3), \fIf_file_descriptor\fP(3), \fIf_file_exists\fP(3), \fIf_file_exists_at\fP(3), \fIf_file_flush\fP(3), \fIf_file_group_read\fP(3), \fIf_file_is\fP(3), \fIf_file_is_at\fP(3), \fIf_file_is_stat\fP(3), \fIf_file_link\fP(3), \fIf_file_link_at\fP(3), \fIf_file_link_hard\fP(3), \fIf_file_link_hard_at\fP(3), \fIf_file_link_read\fP(3), \fIf_file_link_read_at\fP(3), \fIf_file_manipulate\fP(3), \fIf_file_mode_determine\fP(3), \fIf_file_mode_from_string\fP(3), \fIf_file_mode_read\fP(3), \fIf_file_mode_read_at\fP(3), \fIf_file_mode_set\fP(3), \fIf_file_mode_set_at\fP(3), \fIf_file_mode_to_mode\fP(3), \fIf_file_name_base\fP(3), \fIf_file_name_directory\fP(3), \fIf_file_open\fP(3), \fIf_file_open_at\fP(3), \fIf_file_owner_read\fP(3), \fIf_file_poll\fP(3), \fIf_file_read\fP(3), \fIf_file_read_block\fP(3), \fIf_file_read_until\fP(3), \fIf_file_remove\fP(3), \fIf_file_remove_at\fP(3), \fIf_file_rename\fP(3), \fIf_file_rename_at\fP(3), \fIf_file_role_change\fP(3), \fIf_file_role_change_at\fP(3), \fIf_file_seek\fP(3), \fIf_file_select\fP(3), \fIf_file_select_signal\fP(3), \fIf_file_size\fP(3), \fIf_file_size_at\fP(3), \fIf_file_size_by_id\fP(3), \fIf_file_stat\fP(3), \fIf_file_stat_at\fP(3), \fIf_file_stat_by_id\fP(3), \fIf_file_touch\fP(3), \fIf_file_touch_at\fP(3), \fIf_file_type\fP(3), \fIf_file_type_at\fP(3), \fIf_file_umask_get\fP(3), \fIf_file_umask_set\fP(3), \fIf_file_write\fP(3), \fIf_file_write_block\fP(3), \fIf_file_write_range\fP(3), \fIf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_filess_delete_callback.3 b/level_0/f_file/data/documentation/man/man3/f_filess_delete_callback.3
new file mode 100644 (file)
index 0000000..859232b
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_filess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_filess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_filess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_filess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_filess_delete_callback\fP(3), \fIf_filess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_file/data/documentation/man/man3/f_filess_destroy_callback.3 b/level_0/f_file/data/documentation/man/man3/f_filess_destroy_callback.3
new file mode 100644 (file)
index 0000000..8aa7052
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_filess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_filess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t f_filess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_filess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIf_filess_delete_callback\fP(3), \fIf_filess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_apply_delimit.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_apply_delimit.3
new file mode 100644 (file)
index 0000000..f254cd6
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_fss_apply_delimit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_apply_delimit \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_apply_delimit\fP(
+    \fBconst f_number_unsigneds_t \fP\fIdelimits\fP,
+    \fBf_string_static_t *const   \fP\fIbuffer\fP,
+    \fBf_state_t *const           \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Replace all 1-byte character locations specified by the delimits within the given buffer by a delimit placeholder.
+.PP
+Any delimits out of range (beyond the buffer.used) are ignored.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B delimits
+An array of locations containing the delimits to apply within the buffer.
+
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_apply_delimit_range.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_apply_delimit_range.3
new file mode 100644 (file)
index 0000000..a8a0076
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_fss_apply_delimit_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_apply_delimit_range \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_apply_delimit_range\fP(
+    \fBconst f_number_unsigneds_t \fP\fIdelimits\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_string_static_t *const   \fP\fIbuffer\fP,
+    \fBf_state_t *const           \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Replace all 1-byte character locations specified by the delimits within the given buffer by a delimit placeholder if within the given range.
+.PP
+If the delimits are found to be (inclusively) within the range specified by range, then those delimits are applied.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B delimits
+An array of locations containing the delimits to apply within the buffer.
+
+.TP
+.B range
+The range in which to restrict which delimits to apply.
+
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_count_lines.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_count_lines.3
new file mode 100644 (file)
index 0000000..f450042
--- /dev/null
@@ -0,0 +1,80 @@
+.TH f_fss_count_lines "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_count_lines \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_count_lines\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigned_t  \fP\fIbefore\fP,
+    \fBf_number_unsigned_t *const \fP\fIline\fP,
+    \fBf_state_t *const           \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Count the number of new lines from the buffer before the given location.
+.PP
+Use this to calculate where a given range exists in relation to a line.
+.PP
+This does not initialize line, instead it only performs addition to line.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0 (line is set to 0).
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B before
+The position in the buffer where to start counting before.
+
+.TP
+.B line
+The total lines found leading up to but not including before. This value is not reset and only additions are performed. When F_data_not is returned, this value is not altered.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_count_lines_range.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_count_lines_range.3
new file mode 100644 (file)
index 0000000..79258e1
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_fss_count_lines_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_count_lines_range \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_count_lines_range\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_unsigned_t *const \fP\fIline\fP,
+    \fBf_state_t *const           \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Count the number of new lines from the given range in the buffer before the given location.
+.PP
+Use this to calculate where a given range exists in relation to a line.
+.PP
+This does not initialize line, instead it only performs addition to line.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but the range.start is greater than buffer.used or buffer.used is 0 (line is set to 0).
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The range within the buffer to process.
+
+.TP
+.B line
+The total lines found leading up to but not including before. This value is not reset and only additions are performed. When F_data_not is returned, this value is not altered.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_fail_utf.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_fail_utf.3
new file mode 100644 (file)
index 0000000..4ddf4dd
--- /dev/null
@@ -0,0 +1,37 @@
+.TH f_fss_fail_utf "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_fail_utf \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_fail_utf\fP(
+    \fBf_state_t *const \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Using the state, check that the status should return an error or not on invalid UTF-8.
+.PP
+When f_fss_state_flag_utf_fail_on_valid_not_e is set, UTF-8 failures are returned as is. When f_fss_state_flag_utf_fail_on_valid_not_e is unset, UTF-8 failures are returned with the error bit removed.
+.PP
+F_utf_not
+.PP
+This alters state.status: Status is either directly passed through or the error bit is removed depending on state.flag.
+.SH PARAMETERS
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_fail_utf_to_false.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_fail_utf_to_false.3
new file mode 100644 (file)
index 0000000..e3233d6
--- /dev/null
@@ -0,0 +1,37 @@
+.TH f_fss_fail_utf_to_false "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_fail_utf_to_false \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_fail_utf_to_false\fP(
+    \fBf_state_t *const \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Using the state, check that the status should return an error or not on invalid UTF-8.
+.PP
+When f_fss_state_flag_utf_fail_on_valid_not_e is set, UTF-8 failures are returned as is. When f_fss_state_flag_utf_fail_on_valid_not_e is unset, UTF-8 failures are replaced with F_false.
+.PP
+F_utf_not
+.PP
+This alters state.status: Status is either directly passed through or F_false is returned depending on state.flag.
+.SH PARAMETERS
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_is_combining.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_is_combining.3
new file mode 100644 (file)
index 0000000..053f637
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_fss_is_combining "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_is_combining \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t f_fss_is_combining\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a character in the buffer is a combining (ASCII or UTF-8) character.
+.PP
+This only checks if the given character is a combining character and does not check what this combines into.
+.PP
+The combining characters combine from right to left. It is recommended to use this after testing for other characters, such as f_fss_is_space() or f_fss_is_graph(). A combining character can follow any character, even if it is something like a control character. This is unclear behavior so a simple strategy is to assume that a combining character results in a graph for anything except a non-combining zero-width character. U+0020 followed by U+0301 would result in the combination of the two being considered a graph rather than a space. Given that NULL characters are ignored by the general FSS standard, combining characters are not considered to combine into NULL.
+.PP
+This alters state.status: F_true if the character in the buffer is a combining character. F_false if the character in the buffer is not a combining character.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The character at the start position will be checked against the graph.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the character in the buffer is a combining character. F_false if the character in the buffer is not a combining character. F_false is returned on any error.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_is_graph()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_combining()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_is_graph.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_is_graph.3
new file mode 100644 (file)
index 0000000..bb21e4b
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_fss_is_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_is_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t f_fss_is_graph\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a character in the buffer is a graph (ASCII or UTF-8) character.
+.PP
+This alters state.status: F_true if the character in the buffer is a graph character. F_false if the character in the buffer is not a graph character.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_graph().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The character at the start position will be checked against the graph.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the character in the buffer is a graph character. F_false if the character in the buffer is not a graph character. F_false is returned on any error.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3), \fIf_utf_is_graph()\fP, \fIf_utf_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_is_space.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_is_space.3
new file mode 100644 (file)
index 0000000..796f806
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_fss_is_space "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_is_space \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t f_fss_is_space\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a character in the buffer is a non-zero-width whitespace or non-zero-width control (ASCII or UTF-8) character.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but nothing is processed. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_control(). Errors (with error bit) from: f_utf_is_whitespace(). Errors (with error bit) from: f_utf_is_zero_width().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The character at the start position will be checked against the graph.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the character in the buffer is a space character. F_false if the character in the buffer is not a space character. F_false is returned on any error.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3), \fIf_utf_is_control()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_zero_width()\fP, \fIf_utf_is_control()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_zero_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_is_zero_width.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_is_zero_width.3
new file mode 100644 (file)
index 0000000..687bc72
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_fss_is_zero_width "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_is_zero_width \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t f_fss_is_zero_width\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a character in the buffer is a zero-width (ASCII or UTF-8) character.
+.PP
+The NULL character (U+0000) is a zero-width character.
+.PP
+This alters state.status: F_true if the character in the buffer is a zero-width character. F_false if the character in the buffer is not a zero-width character.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_zero_width().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The character at the start position will be checked against the graph.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the character in the buffer is a zero-width character. F_false if the character in the buffer is not a zero-width character. F_false is returned on any error.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3), \fIf_utf_is_zero_width()\fP, \fIf_utf_is_zero_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_item_delete.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_item_delete.3
new file mode 100644 (file)
index 0000000..0b3126c
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_fss_item_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_item_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <item.h>
+.sp
+\fBf_status_t f_fss_item_delete\fP(
+    \fBf_fss_item_t *const \fP\fIitem\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete an item.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B item
+The item to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a item object and its associated content.
+.PP
+Child content represents content nested within some other content and never represents the top-most content.
+.PP
+To designate that either object or content is non-existent, set start position greater than stop position. In particular, set start to 1 and stop to 0.
+.PP
+This does not have resize/adjust macros due to multiple things to potentially resize. Any resizing must be manually performed on each applicable property.
+.PP
+parent: A location referencing a parent Object or Content that this Object Content is nested under.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_item_t {
+  f_range_t           \fIobject\fP;
+  f_range_t           \fIclose\fP;
+  f_ranges_t          \fIcontent\fP;
+  f_number_unsigned_t \fIparent\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIitem.h\fP(3), \fIf_fss_item_delete\fP(3), \fIf_fss_item_destroy\fP(3), \fIf_fss_items_delete_callback\fP(3), \fIf_fss_items_destroy_callback\fP(3), \fIf_fss_itemss_delete_callback\fP(3), \fIf_fss_itemss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_item_destroy.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_item_destroy.3
new file mode 100644 (file)
index 0000000..9e72587
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_fss_item_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_item_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <item.h>
+.sp
+\fBf_status_t f_fss_item_destroy\fP(
+    \fBf_fss_item_t *const \fP\fIitem\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy an item.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B item
+The item to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a item object and its associated content.
+.PP
+Child content represents content nested within some other content and never represents the top-most content.
+.PP
+To designate that either object or content is non-existent, set start position greater than stop position. In particular, set start to 1 and stop to 0.
+.PP
+This does not have resize/adjust macros due to multiple things to potentially resize. Any resizing must be manually performed on each applicable property.
+.PP
+parent: A location referencing a parent Object or Content that this Object Content is nested under.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_item_t {
+  f_range_t           \fIobject\fP;
+  f_range_t           \fIclose\fP;
+  f_ranges_t          \fIcontent\fP;
+  f_number_unsigned_t \fIparent\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIitem.h\fP(3), \fIf_fss_item_delete\fP(3), \fIf_fss_item_destroy\fP(3), \fIf_fss_items_delete_callback\fP(3), \fIf_fss_items_destroy_callback\fP(3), \fIf_fss_itemss_delete_callback\fP(3), \fIf_fss_itemss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_items_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_items_delete_callback.3
new file mode 100644 (file)
index 0000000..3e5189a
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_items_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_items_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <item.h>
+.sp
+\fBf_status_t f_fss_items_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_items_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIitem.h\fP(3), \fIf_fss_item_delete\fP(3), \fIf_fss_item_destroy\fP(3), \fIf_fss_items_delete_callback\fP(3), \fIf_fss_items_destroy_callback\fP(3), \fIf_fss_itemss_delete_callback\fP(3), \fIf_fss_itemss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_items_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_items_destroy_callback.3
new file mode 100644 (file)
index 0000000..e509525
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_items_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_items_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <item.h>
+.sp
+\fBf_status_t f_fss_items_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_items_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIitem.h\fP(3), \fIf_fss_item_delete\fP(3), \fIf_fss_item_destroy\fP(3), \fIf_fss_items_delete_callback\fP(3), \fIf_fss_items_destroy_callback\fP(3), \fIf_fss_itemss_delete_callback\fP(3), \fIf_fss_itemss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_itemss_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_itemss_delete_callback.3
new file mode 100644 (file)
index 0000000..6595b96
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_itemss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_itemss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <item.h>
+.sp
+\fBf_status_t f_fss_itemss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_itemss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIitem.h\fP(3), \fIf_fss_item_delete\fP(3), \fIf_fss_item_destroy\fP(3), \fIf_fss_items_delete_callback\fP(3), \fIf_fss_items_destroy_callback\fP(3), \fIf_fss_itemss_delete_callback\fP(3), \fIf_fss_itemss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_itemss_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_itemss_destroy_callback.3
new file mode 100644 (file)
index 0000000..e69c9c7
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_itemss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_itemss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <item.h>
+.sp
+\fBf_status_t f_fss_itemss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_itemss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIitem.h\fP(3), \fIf_fss_item_delete\fP(3), \fIf_fss_item_destroy\fP(3), \fIf_fss_items_delete_callback\fP(3), \fIf_fss_items_destroy_callback\fP(3), \fIf_fss_itemss_delete_callback\fP(3), \fIf_fss_itemss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_named_delete.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_named_delete.3
new file mode 100644 (file)
index 0000000..001329e
--- /dev/null
@@ -0,0 +1,61 @@
+.TH f_fss_named_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_named_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <named.h>
+.sp
+\fBf_status_t f_fss_named_delete\fP(
+    \fBf_fss_named_t *const \fP\fInamed\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a named.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B named
+The named to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a named set of fss objects, contents, and quotess.
+.PP
+The objects, contents, and quotess should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+quotess: The array of quote for each content.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_named_t {
+  f_range_t   \fIname\fP;
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+  f_uint8ss_t \fIquotess\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInamed.h\fP(3), \fIf_fss_named_delete\fP(3), \fIf_fss_named_destroy\fP(3), \fIf_fss_nameds_delete_callback\fP(3), \fIf_fss_nameds_destroy_callback\fP(3), \fIf_fss_namedss_delete_callback\fP(3), \fIf_fss_namedss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_named_destroy.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_named_destroy.3
new file mode 100644 (file)
index 0000000..390e666
--- /dev/null
@@ -0,0 +1,61 @@
+.TH f_fss_named_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_named_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <named.h>
+.sp
+\fBf_status_t f_fss_named_destroy\fP(
+    \fBf_fss_named_t *const \fP\fInamed\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy a named.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B named
+The named to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a named set of fss objects, contents, and quotess.
+.PP
+The objects, contents, and quotess should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+quotess: The array of quote for each content.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_named_t {
+  f_range_t   \fIname\fP;
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+  f_uint8ss_t \fIquotess\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInamed.h\fP(3), \fIf_fss_named_delete\fP(3), \fIf_fss_named_destroy\fP(3), \fIf_fss_nameds_delete_callback\fP(3), \fIf_fss_nameds_destroy_callback\fP(3), \fIf_fss_namedss_delete_callback\fP(3), \fIf_fss_namedss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nameds_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nameds_delete_callback.3
new file mode 100644 (file)
index 0000000..8e30dee
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_nameds_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nameds_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <named.h>
+.sp
+\fBf_status_t f_fss_nameds_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_nameds_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInamed.h\fP(3), \fIf_fss_named_delete\fP(3), \fIf_fss_named_destroy\fP(3), \fIf_fss_nameds_delete_callback\fP(3), \fIf_fss_nameds_destroy_callback\fP(3), \fIf_fss_namedss_delete_callback\fP(3), \fIf_fss_namedss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nameds_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nameds_destroy_callback.3
new file mode 100644 (file)
index 0000000..d05bbb7
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_nameds_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nameds_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <named.h>
+.sp
+\fBf_status_t f_fss_nameds_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_nameds_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInamed.h\fP(3), \fIf_fss_named_delete\fP(3), \fIf_fss_named_destroy\fP(3), \fIf_fss_nameds_delete_callback\fP(3), \fIf_fss_nameds_destroy_callback\fP(3), \fIf_fss_namedss_delete_callback\fP(3), \fIf_fss_namedss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_namedss_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_namedss_delete_callback.3
new file mode 100644 (file)
index 0000000..52cb6cb
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_namedss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_namedss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <named.h>
+.sp
+\fBf_status_t f_fss_namedss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_namedss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInamed.h\fP(3), \fIf_fss_named_delete\fP(3), \fIf_fss_named_destroy\fP(3), \fIf_fss_nameds_delete_callback\fP(3), \fIf_fss_nameds_destroy_callback\fP(3), \fIf_fss_namedss_delete_callback\fP(3), \fIf_fss_namedss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_namedss_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_namedss_destroy_callback.3
new file mode 100644 (file)
index 0000000..17591b1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_namedss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_namedss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <named.h>
+.sp
+\fBf_status_t f_fss_namedss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_namedss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInamed.h\fP(3), \fIf_fss_named_delete\fP(3), \fIf_fss_named_destroy\fP(3), \fIf_fss_nameds_delete_callback\fP(3), \fIf_fss_nameds_destroy_callback\fP(3), \fIf_fss_namedss_delete_callback\fP(3), \fIf_fss_namedss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nest_delete.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nest_delete.3
new file mode 100644 (file)
index 0000000..2fcd715
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_fss_nest_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nest_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <nest.h>
+.sp
+\fBf_status_t f_fss_nest_delete\fP(
+    \fBf_fss_nest_t *const \fP\fInest\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a nest.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B nest
+The nest to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_fss_items_t.
+.PP
+Each array row represents the nesting depth. The top-level will not have any parent, so "parent" must be ignored on anything at index 0. The parent identifier is expected to reference a position in the nesting depth immediately above it.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_nest_t {
+  f_fss_items_t      *\fIdepth\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInest.h\fP(3), \fIf_fss_nest_delete\fP(3), \fIf_fss_nest_destroy\fP(3), \fIf_fss_nests_delete_callback\fP(3), \fIf_fss_nests_destroy_callback\fP(3), \fIf_fss_nestss_delete_callback\fP(3), \fIf_fss_nestss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nest_destroy.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nest_destroy.3
new file mode 100644 (file)
index 0000000..4a10d47
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_fss_nest_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nest_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <nest.h>
+.sp
+\fBf_status_t f_fss_nest_destroy\fP(
+    \fBf_fss_nest_t *const \fP\fInest\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy a nest.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B nest
+The nest to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_fss_items_t.
+.PP
+Each array row represents the nesting depth. The top-level will not have any parent, so "parent" must be ignored on anything at index 0. The parent identifier is expected to reference a position in the nesting depth immediately above it.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_nest_t {
+  f_fss_items_t      *\fIdepth\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInest.h\fP(3), \fIf_fss_nest_delete\fP(3), \fIf_fss_nest_destroy\fP(3), \fIf_fss_nests_delete_callback\fP(3), \fIf_fss_nests_destroy_callback\fP(3), \fIf_fss_nestss_delete_callback\fP(3), \fIf_fss_nestss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nests_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nests_delete_callback.3
new file mode 100644 (file)
index 0000000..b35e178
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_nests_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nests_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <nest.h>
+.sp
+\fBf_status_t f_fss_nests_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_nests_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInest.h\fP(3), \fIf_fss_nest_delete\fP(3), \fIf_fss_nest_destroy\fP(3), \fIf_fss_nests_delete_callback\fP(3), \fIf_fss_nests_destroy_callback\fP(3), \fIf_fss_nestss_delete_callback\fP(3), \fIf_fss_nestss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nests_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nests_destroy_callback.3
new file mode 100644 (file)
index 0000000..1c2c8ec
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_nests_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nests_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <nest.h>
+.sp
+\fBf_status_t f_fss_nests_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_nests_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInest.h\fP(3), \fIf_fss_nest_delete\fP(3), \fIf_fss_nest_destroy\fP(3), \fIf_fss_nests_delete_callback\fP(3), \fIf_fss_nests_destroy_callback\fP(3), \fIf_fss_nestss_delete_callback\fP(3), \fIf_fss_nestss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nestss_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nestss_delete_callback.3
new file mode 100644 (file)
index 0000000..9e062cd
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_nestss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nestss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <nest.h>
+.sp
+\fBf_status_t f_fss_nestss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_nestss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInest.h\fP(3), \fIf_fss_nest_delete\fP(3), \fIf_fss_nest_destroy\fP(3), \fIf_fss_nests_delete_callback\fP(3), \fIf_fss_nests_destroy_callback\fP(3), \fIf_fss_nestss_delete_callback\fP(3), \fIf_fss_nestss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_nestss_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_nestss_destroy_callback.3
new file mode 100644 (file)
index 0000000..e1978a4
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_nestss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_nestss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <nest.h>
+.sp
+\fBf_status_t f_fss_nestss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_nestss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInest.h\fP(3), \fIf_fss_nest_delete\fP(3), \fIf_fss_nest_destroy\fP(3), \fIf_fss_nests_delete_callback\fP(3), \fIf_fss_nests_destroy_callback\fP(3), \fIf_fss_nestss_delete_callback\fP(3), \fIf_fss_nestss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_seek_to_eol.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_seek_to_eol.3
new file mode 100644 (file)
index 0000000..a1a6910
--- /dev/null
@@ -0,0 +1,68 @@
+.TH f_fss_seek_to_eol "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_seek_to_eol \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_seek_to_eol\fP(
+    \fBconst f_string_dynamic_t \fP\fIbuffer\fP,
+    \fBf_range_t *const         \fP\fIrange\fP,
+    \fBf_state_t *const         \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek until an EOL character is reached.
+.PP
+This does not check the character after the EOL is reached. The character after an EOL should be checked to see if it is a combining character. Combining characters after the EOL effectively make the EOL character a non-standard EOL. For most, if not all, FSS standards, a combined EOL is not the same as a standard or normal EOL.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used. F_okay_eos on success and EOS was reached. F_okay_stop on success and stop point was reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start and stop positions in the buffer being processed. This increments range->start.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_delete.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_delete.3
new file mode 100644 (file)
index 0000000..a5b51ef
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_fss_set_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_fss_set_delete\fP(
+    \fBf_fss_set_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a set.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B set
+The set to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds an fss object with a set of fss content.
+.PP
+The objects and contents should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+contents: The array of contents.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_set_t {
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_fss_set_delete\fP(3), \fIf_fss_set_destroy\fP(3), \fIf_fss_sets_delete_callback\fP(3), \fIf_fss_sets_destroy_callback\fP(3), \fIf_fss_setss_delete_callback\fP(3), \fIf_fss_setss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_destroy.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_destroy.3
new file mode 100644 (file)
index 0000000..a164c72
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_fss_set_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_fss_set_destroy\fP(
+    \fBf_fss_set_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy a set.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B set
+The set to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds an fss object with a set of fss content.
+.PP
+The objects and contents should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+contents: The array of contents.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_set_t {
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_fss_set_delete\fP(3), \fIf_fss_set_destroy\fP(3), \fIf_fss_sets_delete_callback\fP(3), \fIf_fss_sets_destroy_callback\fP(3), \fIf_fss_setss_delete_callback\fP(3), \fIf_fss_setss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_quote_delete.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_quote_delete.3
new file mode 100644 (file)
index 0000000..8863831
--- /dev/null
@@ -0,0 +1,61 @@
+.TH f_fss_set_quote_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_quote_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <set_quote.h>
+.sp
+\fBf_status_t f_fss_set_quote_delete\fP(
+    \fBf_fss_set_quote_t *const \fP\fIset_quote\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a quote set.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B set_quote
+The quote set to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds an fss object with a set of fss content, along with their quote types.
+.PP
+The objects, contents, and quotes should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+contents_quote: The array of contents quote types.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_set_quote_t {
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+  f_uint8s_t  \fIobjects_quote\fP;
+  f_uint8ss_t \fIcontents_quote\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset_quote.h\fP(3), \fIf_fss_set_quote_delete\fP(3), \fIf_fss_set_quote_destroy\fP(3), \fIf_fss_set_quotes_delete_callback\fP(3), \fIf_fss_set_quotes_destroy_callback\fP(3), \fIf_fss_set_quotess_delete_callback\fP(3), \fIf_fss_set_quotess_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_quote_destroy.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_quote_destroy.3
new file mode 100644 (file)
index 0000000..c30c6db
--- /dev/null
@@ -0,0 +1,61 @@
+.TH f_fss_set_quote_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_quote_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <set_quote.h>
+.sp
+\fBf_status_t f_fss_set_quote_destroy\fP(
+    \fBf_fss_set_quote_t *const \fP\fIset_quote\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy a quote set.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B set_quote
+The quote set to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds an fss object with a set of fss content, along with their quote types.
+.PP
+The objects, contents, and quotes should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+contents_quote: The array of contents quote types.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_set_quote_t {
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+  f_uint8s_t  \fIobjects_quote\fP;
+  f_uint8ss_t \fIcontents_quote\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset_quote.h\fP(3), \fIf_fss_set_quote_delete\fP(3), \fIf_fss_set_quote_destroy\fP(3), \fIf_fss_set_quotes_delete_callback\fP(3), \fIf_fss_set_quotes_destroy_callback\fP(3), \fIf_fss_set_quotess_delete_callback\fP(3), \fIf_fss_set_quotess_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotes_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotes_delete_callback.3
new file mode 100644 (file)
index 0000000..8d36cba
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_set_quotes_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_quotes_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set_quote.h>
+.sp
+\fBf_status_t f_fss_set_quotes_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_set_quotes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset_quote.h\fP(3), \fIf_fss_set_quote_delete\fP(3), \fIf_fss_set_quote_destroy\fP(3), \fIf_fss_set_quotes_delete_callback\fP(3), \fIf_fss_set_quotes_destroy_callback\fP(3), \fIf_fss_set_quotess_delete_callback\fP(3), \fIf_fss_set_quotess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotes_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotes_destroy_callback.3
new file mode 100644 (file)
index 0000000..7d7046e
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_set_quotes_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_quotes_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set_quote.h>
+.sp
+\fBf_status_t f_fss_set_quotes_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_set_quotes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset_quote.h\fP(3), \fIf_fss_set_quote_delete\fP(3), \fIf_fss_set_quote_destroy\fP(3), \fIf_fss_set_quotes_delete_callback\fP(3), \fIf_fss_set_quotes_destroy_callback\fP(3), \fIf_fss_set_quotess_delete_callback\fP(3), \fIf_fss_set_quotess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotess_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotess_delete_callback.3
new file mode 100644 (file)
index 0000000..77ce1c3
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_set_quotess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_quotess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set_quote.h>
+.sp
+\fBf_status_t f_fss_set_quotess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_set_quotess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset_quote.h\fP(3), \fIf_fss_set_quote_delete\fP(3), \fIf_fss_set_quote_destroy\fP(3), \fIf_fss_set_quotes_delete_callback\fP(3), \fIf_fss_set_quotes_destroy_callback\fP(3), \fIf_fss_set_quotess_delete_callback\fP(3), \fIf_fss_set_quotess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotess_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_set_quotess_destroy_callback.3
new file mode 100644 (file)
index 0000000..6a8f1f3
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_set_quotess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_set_quotess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set_quote.h>
+.sp
+\fBf_status_t f_fss_set_quotess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_set_quotess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset_quote.h\fP(3), \fIf_fss_set_quote_delete\fP(3), \fIf_fss_set_quote_destroy\fP(3), \fIf_fss_set_quotes_delete_callback\fP(3), \fIf_fss_set_quotes_destroy_callback\fP(3), \fIf_fss_set_quotess_delete_callback\fP(3), \fIf_fss_set_quotess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_sets_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_sets_delete_callback.3
new file mode 100644 (file)
index 0000000..40f6cf6
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_sets_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_sets_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_fss_sets_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_sets_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_fss_set_delete\fP(3), \fIf_fss_set_destroy\fP(3), \fIf_fss_sets_delete_callback\fP(3), \fIf_fss_sets_destroy_callback\fP(3), \fIf_fss_setss_delete_callback\fP(3), \fIf_fss_setss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_sets_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_sets_destroy_callback.3
new file mode 100644 (file)
index 0000000..98d23ee
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_sets_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_sets_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_fss_sets_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_sets_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_fss_set_delete\fP(3), \fIf_fss_set_destroy\fP(3), \fIf_fss_sets_delete_callback\fP(3), \fIf_fss_sets_destroy_callback\fP(3), \fIf_fss_setss_delete_callback\fP(3), \fIf_fss_setss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_setss_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_setss_delete_callback.3
new file mode 100644 (file)
index 0000000..0c02336
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_setss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_setss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_fss_setss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_setss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_fss_set_delete\fP(3), \fIf_fss_set_destroy\fP(3), \fIf_fss_sets_delete_callback\fP(3), \fIf_fss_sets_destroy_callback\fP(3), \fIf_fss_setss_delete_callback\fP(3), \fIf_fss_setss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_setss_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_setss_destroy_callback.3
new file mode 100644 (file)
index 0000000..efdd1c4
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_setss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_setss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_fss_setss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_setss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_fss_set_delete\fP(3), \fIf_fss_set_destroy\fP(3), \fIf_fss_sets_delete_callback\fP(3), \fIf_fss_sets_destroy_callback\fP(3), \fIf_fss_setss_delete_callback\fP(3), \fIf_fss_setss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_decode.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_decode.3
new file mode 100644 (file)
index 0000000..a2d1cf9
--- /dev/null
@@ -0,0 +1,90 @@
+.TH f_fss_simple_packet_decode "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packet_decode \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packet_decode\fP(
+    \fBconst f_string_static_t      \fP\fIbuffer\fP,
+    \fBf_fss_simple_packet_t *const \fP\fIpacket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Extract the different parts of the FSS-000F (Simple Packet) string into a packet structure.
+.PP
+The buffer is processed as binary data, therefore, NULL and other control data are considered valid data and are not ignored.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_valid_not (with error bit) if the data is invalid, which generally only happens when the value of the Size block is less than 5 (and when not returning F_partial).
+.SH PARAMETERS
+.TP
+.B buffer
+The string buffer to identify the packet ranges of. This buffer is considered binary data and so any NULL found within is treated as a valid part of the buffer.
+
+.TP
+.B packet
+The packet extracted from the given buffer, without doing anything to the payload. The caller can allocate the payload and extract it at any time by just selecting the string from F_fss_simple_packet_block_header_size_d until at most F_fss_simple_packet_block_payload_size_d.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing the Simple Packet.
+.PP
+payload: The Payload Block, which is inclusively between 0 and (2^32)-6 bytes long.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_simple_packet_t {
+  uint8_t            \fIcontrol\fP;
+  uint32_t           \fIsize\fP;
+  f_string_dynamic_t \fIpayload\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success (The end of the Payload Block is assumed to be the remainder of the buffer or F_fss_simple_packet_block_payload_size_d, whichever is smaller). F_packet_too_small if the buffer.used is smaller than the minimum size of the packet.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_decode_range.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_decode_range.3
new file mode 100644 (file)
index 0000000..d1bf311
--- /dev/null
@@ -0,0 +1,90 @@
+.TH f_fss_simple_packet_decode_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packet_decode_range \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packet_decode_range\fP(
+    \fBconst f_string_static_t            \fP\fIbuffer\fP,
+    \fBf_fss_simple_packet_range_t *const \fP\fIpacket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Extract the different parts of the FSS-000F (Simple Packet) string into a packet range structure.
+.PP
+The buffer is processed as binary data, therefore, NULL and other control data are considered valid data and are not ignored.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_valid_not (with error bit) if the data is invalid, which generally only happens when the value of the Size block is less than 5 (and when not returning F_partial).
+.SH PARAMETERS
+.TP
+.B buffer
+The string buffer to identify the packet ranges of. This buffer is considered binary data and so any NULL found within is treated as a valid part of the buffer.
+
+.TP
+.B packet
+The packet range extracted from the given buffer, with the payload being represented by a range.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A packet header, where the payload is represented by a range.
+.PP
+payload: The Payload Block, which is inclusively between 0 and (2^32)-6 bytes long.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_simple_packet_range_t {
+  uint8_t   \fIcontrol\fP;
+  uint32_t  \fIsize\fP;
+  f_range_t \fIpayload\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success (The end of the Payload Block is assumed to be the remainder of the buffer or F_fss_simple_packet_block_payload_size_d, whichever is smaller). F_packet_too_small if the buffer.used is smaller than the minimum size of the packet.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_delete.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_delete.3
new file mode 100644 (file)
index 0000000..7d3898e
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_fss_simple_packet_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packet_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packet_delete\fP(
+    \fBf_fss_simple_packet_t *const \fP\fIsimple_packet\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a FSS-000F (Simple Packet).
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B simple_packet
+The FSS-000F (Simple Packet) to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure representing the Simple Packet.
+.PP
+payload: The Payload Block, which is inclusively between 0 and (2^32)-6 bytes long.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_simple_packet_t {
+  uint8_t            \fIcontrol\fP;
+  uint32_t           \fIsize\fP;
+  f_string_dynamic_t \fIpayload\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_destroy.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_destroy.3
new file mode 100644 (file)
index 0000000..e73bd18
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_fss_simple_packet_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packet_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packet_destroy\fP(
+    \fBf_fss_simple_packet_t *const \fP\fIsimple_packet\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy a FSS-000F (Simple Packet).
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B simple_packet
+The FSS-000F (Simple Packet) to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure representing the Simple Packet.
+.PP
+payload: The Payload Block, which is inclusively between 0 and (2^32)-6 bytes long.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_simple_packet_t {
+  uint8_t            \fIcontrol\fP;
+  uint32_t           \fIsize\fP;
+  f_string_dynamic_t \fIpayload\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_encode.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packet_encode.3
new file mode 100644 (file)
index 0000000..00987ba
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_fss_simple_packet_encode "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packet_encode \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packet_encode\fP(
+    \fBconst uint8_t             \fP\fIcontrol\fP,
+    \fBconst uint32_t            \fP\fIsize\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Encode the control and size parts of the FSS-000F (Simple Packet) packet structure into a string.
+.PP
+This encodes only the header parts of the packet, which consists of the control block and the size block.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B control
+The bits to encode into the control block.
+
+.TP
+.B size
+The size to encode into the size block.
+
+.TP
+.B destination
+The string buffer to encode the packet parts into.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packets_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packets_delete_callback.3
new file mode 100644 (file)
index 0000000..05bba5c
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_simple_packets_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packets_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packets_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_simple_packets_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packets_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packets_destroy_callback.3
new file mode 100644 (file)
index 0000000..1b8e863
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_simple_packets_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packets_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packets_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_simple_packets_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packetss_delete_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packetss_delete_callback.3
new file mode 100644 (file)
index 0000000..279e3cc
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_simple_packetss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packetss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packetss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_fss_simple_packetss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packetss_destroy_callback.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_simple_packetss_destroy_callback.3
new file mode 100644 (file)
index 0000000..cc3fbb1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_fss_simple_packetss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_simple_packetss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <simple_packet.h>
+.sp
+\fBf_status_t f_fss_simple_packetss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_fss_simple_packetss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsimple_packet.h\fP(3), \fIf_fss_simple_packet_decode\fP(3), \fIf_fss_simple_packet_decode_range\fP(3), \fIf_fss_simple_packet_delete\fP(3), \fIf_fss_simple_packet_destroy\fP(3), \fIf_fss_simple_packet_encode\fP(3), \fIf_fss_simple_packets_delete_callback\fP(3), \fIf_fss_simple_packets_destroy_callback\fP(3), \fIf_fss_simple_packetss_delete_callback\fP(3), \fIf_fss_simple_packetss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_delimit.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_delimit.3
new file mode 100644 (file)
index 0000000..379ffd7
--- /dev/null
@@ -0,0 +1,91 @@
+.TH f_fss_skip_past_delimit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_skip_past_delimit \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_skip_past_delimit\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Skip past all delimit placeholders until a non-delimit placeholder is reached.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used. F_okay_eos on success and EOS was reached. F_okay_stop on success and stop point was reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start and stop positions in the buffer being processed. This increments range->start.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_space.3 b/level_0/f_fss/data/documentation/man/man3/f_fss_skip_past_space.3
new file mode 100644 (file)
index 0000000..df3ea0c
--- /dev/null
@@ -0,0 +1,97 @@
+.TH f_fss_skip_past_space "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_fss_skip_past_space \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBvoid f_fss_skip_past_space\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Skip past all white space, control characters, and zero-width characters, except newline '
+.PP
+' (U+000A).
+.PP
+If the first character in the given range is a combining character, then this will not skip past anything. This is because combining characters apply from right to left.
+.PP
+This alters state.status: F_okay on success. F_data_not on success but buffer.used is 0, initial range.start is greater than range.stop, or initial range.start is greater than or equal to buffer.used. F_okay_eol on success and EOL was reached. F_okay_eos on success and EOS was reached. F_okay_stop on success and stop point was reached.
+.PP
+F_complete_not_utf_eos (with error bit) if unable to get entire UTF-8 sequence due to EOS. F_complete_not_utf_start (with error bit) if the first character is a combining character. F_complete_not_utf_stop (with error bit) if unable to get entire UTF-8 sequence due to stop point reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_control(). Errors (with error bit) from: f_utf_is_whitespace(). Errors (with error bit) from: f_utf_is_zero_width().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start and stop positions in the buffer being processed. This increments range->start.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIf_fss_apply_delimit\fP(3), \fIf_fss_apply_delimit_range\fP(3), \fIf_fss_count_lines\fP(3), \fIf_fss_count_lines_range\fP(3), \fIf_fss_fail_utf\fP(3), \fIf_fss_fail_utf_to_false\fP(3), \fIf_fss_is_combining\fP(3), \fIf_fss_is_graph\fP(3), \fIf_fss_is_space\fP(3), \fIf_fss_is_zero_width\fP(3), \fIf_fss_seek_to_eol\fP(3), \fIf_fss_skip_past_delimit\fP(3), \fIf_fss_skip_past_space\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_control()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_zero_width()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_control()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_zero_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_content_is.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_content_is.3
new file mode 100644 (file)
index 0000000..539a1f2
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_iki_content_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_content_is \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t f_iki_content_is\fP(
+    \fBconst f_string_static_t \fP\fIcontent\fP,
+    \fBconst f_string_static_t \fP\fIquote\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if an content is a valid IKI content name.
+.PP
+The content does not include the wrapping quotes.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B content
+The string to validate as an content name.
+
+.TP
+.B quote
+The quote character in use. This must be either a single quote (') (U+0027), double quote (") (U+0022), or grave (`) (U+0060).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on success and string is a valid content name. F_false on success and string is not a valid content name. F_data_not on success, but the content.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_content_partial_is.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_content_partial_is.3
new file mode 100644 (file)
index 0000000..8da6340
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_iki_content_partial_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_content_partial_is \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t f_iki_content_partial_is\fP(
+    \fBconst f_string_static_t \fP\fIcontent\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_string_static_t \fP\fIquote\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if an content, found within the given range, is a valid IKI content name.
+.PP
+The content does not include the wrapping quotes.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B content
+The string to validate as an content name.
+
+.TP
+.B range
+The range within the buffer that represents the content name.
+
+.TP
+.B quote
+The quote character in use. This must be either a single quote (') (U+0027), double quote (") (U+0022), or grave (`) (U+0060).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on success and string is a valid content name. F_false on success and string is not a valid content name. F_data_not on success, but the content.used is 0. F_data_not_eos on success but the start range exceeds the buffer.used. F_data_not_stop on success but the start range exceeds the stop range.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_data_delete.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_data_delete.3
new file mode 100644 (file)
index 0000000..00fd3fd
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_iki_data_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_data_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_data_delete\fP(
+    \fBf_iki_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the IKI data.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B data
+The IKI data to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_data_destroy.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_data_destroy.3
new file mode 100644 (file)
index 0000000..16ef9fe
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_iki_data_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_data_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_data_destroy\fP(
+    \fBf_iki_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy the IKI data.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B data
+The IKI data to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datas_append.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datas_append.3
new file mode 100644 (file)
index 0000000..36ca5c6
--- /dev/null
@@ -0,0 +1,83 @@
+.TH f_iki_datas_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datas_append \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datas_append\fP(
+    \fBconst f_iki_data_t   \fP\fIsource\fP,
+    \fBf_iki_datas_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source iki_data onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_append(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_ranges_append_all().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_data to append.
+
+.TP
+.B destination
+The destination iki_datas the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_data_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datas_t {
+  f_iki_data_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_array_append()\fP, \fIf_memory_array_increase()\fP, \fIf_ranges_append_all()\fP, \fIf_memory_array_append()\fP, \fIf_memory_array_increase()\fP, \fIf_ranges_append_all()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datas_append_all.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datas_append_all.3
new file mode 100644 (file)
index 0000000..c05de0e
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_iki_datas_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datas_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datas_append_all\fP(
+    \fBconst f_iki_datas_t  \fP\fIsource\fP,
+    \fBf_iki_datas_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source iki_datas onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_append(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_ranges_append_all().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_datas to append.
+
+.TP
+.B destination
+The destination iki_datas the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_data_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datas_t {
+  f_iki_data_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_data_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datas_t {
+  f_iki_data_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_array_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_ranges_append_all()\fP, \fIf_memory_array_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_ranges_append_all()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datas_delete_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datas_delete_callback.3
new file mode 100644 (file)
index 0000000..efd55d1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_datas_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datas_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datas_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_iki_datas_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datas_destroy_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datas_destroy_callback.3
new file mode 100644 (file)
index 0000000..afa3fff
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_datas_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datas_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datas_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_iki_datas_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datass_append.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datass_append.3
new file mode 100644 (file)
index 0000000..e34000c
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_iki_datass_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datass_append \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datass_append\fP(
+    \fBconst f_iki_datas_t   \fP\fIsource\fP,
+    \fBf_iki_datass_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source iki_datas onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_datas to append.
+
+.TP
+.B destination
+The destination ranges the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_data_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datas_t {
+  f_iki_data_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_datas_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datass_t {
+  f_iki_datas_t      *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datass_append_all.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datass_append_all.3
new file mode 100644 (file)
index 0000000..c49c6b2
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_iki_datass_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datass_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datass_append_all\fP(
+    \fBconst f_iki_datass_t  \fP\fIsource\fP,
+    \fBf_iki_datass_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source iki_datass onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_datass to append.
+
+.TP
+.B destination
+The destination ranges the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_datas_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datass_t {
+  f_iki_datas_t      *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_datas_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_datass_t {
+  f_iki_datas_t      *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datass_delete_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datass_delete_callback.3
new file mode 100644 (file)
index 0000000..1fed5a1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_datass_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datass_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datass_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_iki_datass_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_datass_destroy_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_datass_destroy_callback.3
new file mode 100644 (file)
index 0000000..9cb9f52
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_datass_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_datass_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t f_iki_datass_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_iki_datass_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIf_iki_data_delete\fP(3), \fIf_iki_data_destroy\fP(3), \fIf_iki_datas_append\fP(3), \fIf_iki_datas_append_all\fP(3), \fIf_iki_datas_delete_callback\fP(3), \fIf_iki_datas_destroy_callback\fP(3), \fIf_iki_datass_append\fP(3), \fIf_iki_datass_append_all\fP(3), \fIf_iki_datass_delete_callback\fP(3), \fIf_iki_datass_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_eki_delete.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_eki_delete.3
new file mode 100644 (file)
index 0000000..018c9cc
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_iki_eki_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_eki_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_eki_delete\fP(
+    \fBf_iki_eki_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the IKI EKI data.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B data
+The IKI EKI data to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the EKI data (extended IKI data).
+.PP
+vocabularys: A set of ranges representing the vocabularies (variable names) list to store each found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_eki_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_rangess_t          \fIvocabularys\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_eki_destroy.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_eki_destroy.3
new file mode 100644 (file)
index 0000000..b78a5c2
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_iki_eki_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_eki_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_eki_destroy\fP(
+    \fBf_iki_eki_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy the IKI EKI data.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B data
+The IKI EKI data to destroy.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the EKI data (extended IKI data).
+.PP
+vocabularys: A set of ranges representing the vocabularies (variable names) list to store each found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_eki_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_rangess_t          \fIvocabularys\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_eki_read.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_eki_read.3
new file mode 100644 (file)
index 0000000..eed3333
--- /dev/null
@@ -0,0 +1,124 @@
+.TH f_iki_eki_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_eki_read \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBvoid f_iki_eki_read\fP(
+    \fBf_string_static_t *const \fP\fIbuffer\fP,
+    \fBf_range_t *const         \fP\fIrange\fP,
+    \fBf_iki_eki_t *const       \fP\fIdata\fP,
+    \fBf_state_t *const         \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a single EKI Vocabulary and Content.
+.PP
+This does not verify if the vocabulary name is known. This only finds a complete vocabulary name and content.
+.PP
+This will increment the range after the end of any valud vocabulary and content set.
+.PP
+This will update the buffer at the given range with any placeholders to escaped data. Calling this more than once on the same buffer range could result in multiple escaping.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success and an IKI vocabulary name was found. F_okay_eos on success and an IKI vocabulary name was found and end of string was reached. F_okay_stop on success and an IKI vocabulary name was found and stop point was reached. F_complete_not_utf_eos on success but string ended on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is not set. F_complete_not_utf_stop on success but stop point reached on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is not set. F_data_not on success, but there were no IKI vocabulary names found. F_data_not_eos on success and EOS was reached, but there were no IKI vocabulary names found. F_data_not_stop on success and stop point was reached, but there were no IKI vocabulary names found.
+.PP
+F_complete_not_utf_eos (with error bit) on success but string ended on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is set. F_complete_not_utf_stop (with error bit) on success but stop point reached on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is set. F_interrupt (with error bit) if stopping due to an interrupt. 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 a string length is too large to store in the buffer.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B data
+The EKI variable data.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions. This must not be NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the EKI data (extended IKI data).
+.PP
+vocabularys: A set of ranges representing the vocabularies (variable names) list to store each found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_eki_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_rangess_t          \fIvocabularys\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3), \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_eki_write.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_eki_write.3
new file mode 100644 (file)
index 0000000..de066db
--- /dev/null
@@ -0,0 +1,138 @@
+.TH f_iki_eki_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_eki_write \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBvoid f_iki_eki_write\fP(
+    \fBconst f_string_statics_t  \fP\fIvocabularys\fP,
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst f_string_static_t   \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an EKI vocabulary and content as an EKI string.
+.PP
+Anything within this source strings will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+force_wrap: Always use wrapping characters even when not strictly required.
+.PP
+There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success.
+.PP
+F_data_not (with error bit) if either the vocabularys array has a length of 0. F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid. F_syntax (with error bit) if the vocabulary has unsupported characters (NULL is ignored and does not produce this error).
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_utf_buffer_increment(). Errors (with error bit) from: f_utf_is_word_dash_plus().
+.SH PARAMETERS
+.TP
+.B vocabularys
+
+.TP
+.B content
+The EKI content.
+
+.TP
+.B quote
+The quote to use.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3), \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_utf_buffer_increment()\fP, \fIf_utf_is_word_dash_plus()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_utf_buffer_increment()\fP, \fIf_utf_is_word_dash_plus()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_append.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_append.3
new file mode 100644 (file)
index 0000000..c320e6b
--- /dev/null
@@ -0,0 +1,83 @@
+.TH f_iki_ekis_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekis_append \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekis_append\fP(
+    \fBconst f_iki_eki_t   \fP\fIsource\fP,
+    \fBf_iki_ekis_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source iki_eki onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_append(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_ranges_append_all(). Errors (with error bit) from: f_rangess_append_all().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_eki to append.
+
+.TP
+.B destination
+The destination iki_ekis the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the EKI data (extended IKI data).
+.PP
+vocabularys: A set of ranges representing the vocabularies (variable names) list to store each found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_eki_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_rangess_t          \fIvocabularys\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_eki_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekis_t {
+  f_iki_eki_t        *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_array_append()\fP, \fIf_memory_array_increase()\fP, \fIf_ranges_append_all()\fP, \fIf_rangess_append_all()\fP, \fIf_memory_array_append()\fP, \fIf_memory_array_increase()\fP, \fIf_ranges_append_all()\fP, \fIf_rangess_append_all()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_append_all.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_append_all.3
new file mode 100644 (file)
index 0000000..0d70cfa
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_iki_ekis_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekis_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekis_append_all\fP(
+    \fBconst f_iki_ekis_t  \fP\fIsource\fP,
+    \fBf_iki_ekis_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source iki_ekis onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_append(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_ranges_append_all(). Errors (with error bit) from: f_rangess_append_all().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_ekis to append.
+
+.TP
+.B destination
+The destination iki_ekis the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_eki_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekis_t {
+  f_iki_eki_t        *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_eki_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekis_t {
+  f_iki_eki_t        *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_array_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_ranges_append_all()\fP, \fIf_rangess_append_all()\fP, \fIf_memory_array_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_ranges_append_all()\fP, \fIf_rangess_append_all()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_delete_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_delete_callback.3
new file mode 100644 (file)
index 0000000..0e29782
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_ekis_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekis_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekis_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_iki_ekis_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_destroy_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekis_destroy_callback.3
new file mode 100644 (file)
index 0000000..3f64cce
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_ekis_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekis_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekis_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_iki_ekis_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_append.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_append.3
new file mode 100644 (file)
index 0000000..8c0a05a
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_iki_ekiss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekiss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekiss_append\fP(
+    \fBconst f_iki_ekis_t   \fP\fIsource\fP,
+    \fBf_iki_ekiss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source iki_ekis onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_ekis to append.
+
+.TP
+.B destination
+The destination ranges the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_eki_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekis_t {
+  f_iki_eki_t        *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_ekis_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekiss_t {
+  f_iki_ekis_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_append_all.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_append_all.3
new file mode 100644 (file)
index 0000000..cb56a73
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_iki_ekiss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekiss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekiss_append_all\fP(
+    \fBconst f_iki_ekiss_t  \fP\fIsource\fP,
+    \fBf_iki_ekiss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source iki_ekiss onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source iki_ekiss to append.
+
+.TP
+.B destination
+The destination ranges the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_ekis_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekiss_t {
+  f_iki_ekis_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_iki_ekis_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_ekiss_t {
+  f_iki_ekis_t       *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_delete_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_delete_callback.3
new file mode 100644 (file)
index 0000000..7e8b512
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_ekiss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekiss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekiss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_iki_ekiss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_destroy_callback.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_ekiss_destroy_callback.3
new file mode 100644 (file)
index 0000000..68c5ea8
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_iki_ekiss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_ekiss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <eki.h>
+.sp
+\fBf_status_t f_iki_ekiss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_iki_ekiss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust(). Errors (with error bit) from: f_memory_arrays_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki.h\fP(3), \fIf_iki_eki_delete\fP(3), \fIf_iki_eki_destroy\fP(3), \fIf_iki_ekis_append\fP(3), \fIf_iki_ekis_append_all\fP(3), \fIf_iki_ekis_delete_callback\fP(3), \fIf_iki_ekis_destroy_callback\fP(3), \fIf_iki_ekiss_append\fP(3), \fIf_iki_ekiss_append_all\fP(3), \fIf_iki_ekiss_delete_callback\fP(3), \fIf_iki_ekiss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_object_is.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_object_is.3
new file mode 100644 (file)
index 0000000..5a8b0e6
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_iki_object_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_object_is \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t f_iki_object_is\fP(
+    \fBconst f_string_static_t \fP\fIobject\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if an object is a valid IKI object name.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_word().
+.SH PARAMETERS
+.TP
+.B object
+The string to validate as an object name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on success and string is a valid object name. F_false on success and string is not a valid object name. F_data_not on success, but the object.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3), \fIf_utf_is_word()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_object_partial_is.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_object_partial_is.3
new file mode 100644 (file)
index 0000000..08d84af
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_iki_object_partial_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_object_partial_is \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t f_iki_object_partial_is\fP(
+    \fBconst f_string_static_t \fP\fIobject\fP,
+    \fBconst f_range_t         \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if an object, found within the given range, is a valid IKI object name.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_is_word_dash_plus().
+.SH PARAMETERS
+.TP
+.B object
+The string to validate as an object name.
+
+.TP
+.B range
+The range within the buffer that represents the object name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on success and string is a valid object name. F_false on success and string is not a valid object name. F_data_not on success, but the object.used is 0. F_data_not_eos on success but the start range exceeds the object.used. F_data_not_stop on success but the start range exceeds the stop range.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3), \fIf_utf_is_word_dash_plus()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_read.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_read.3
new file mode 100644 (file)
index 0000000..9a5773a
--- /dev/null
@@ -0,0 +1,124 @@
+.TH f_iki_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_read \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBvoid f_iki_read\fP(
+    \fBf_string_static_t *const \fP\fIbuffer\fP,
+    \fBf_range_t *const         \fP\fIrange\fP,
+    \fBf_iki_data_t *const      \fP\fIdata\fP,
+    \fBf_state_t *const         \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a single IKI Vocabulary and Content.
+.PP
+This does not verify if the vocabulary name is known. This only finds a complete vocabulary name and content.
+.PP
+This will increment the range after the end of any valud vocabulary and content set.
+.PP
+This will update the buffer at the given range with any placeholders to escaped data. Calling this more than once on the same buffer range could result in multiple escaping.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success and an IKI vocabulary name was found. F_okay_eos on success and an IKI vocabulary name was found and end of string was reached. F_okay_stop on success and an IKI vocabulary name was found and stop point was reached. F_complete_not_utf_eos on success but string ended on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is not set. F_complete_not_utf_stop on success but stop point reached on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is not set. F_data_not on success, but there were no IKI vocabulary names found. F_data_not_eos on success and EOS was reached, but there were no IKI vocabulary names found. F_data_not_stop on success and stop point was reached, but there were no IKI vocabulary names found.
+.PP
+F_complete_not_utf_eos (with error bit) on success but string ended on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is set. F_complete_not_utf_stop (with error bit) on success but stop point reached on incomplete UTF-8 and f_iki_state_flag_utf_fail_on_valid_not_e is set. F_interrupt (with error bit) if stopping due to an interrupt. 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 a string length is too large to store in the buffer.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B data
+The IKI variable data.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions. This must not be NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3), \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_iki/data/documentation/man/man3/f_iki_write.3 b/level_0/f_iki/data/documentation/man/man3/f_iki_write.3
new file mode 100644 (file)
index 0000000..108fe04
--- /dev/null
@@ -0,0 +1,145 @@
+.TH f_iki_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_iki_write \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBvoid f_iki_write\fP(
+    \fBconst f_string_static_t   \fP\fIvocabulary\fP,
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst f_string_static_t   \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an IKI vocabulary and content as an IKI string.
+.PP
+Anything within this source strings will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+force_wrap: Always use wrapping characters even when not strictly required.
+.PP
+There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success.
+.PP
+F_data_not (with error bit) if either the vocabulary string has a length of 0. F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid. F_syntax (with error bit) if the vocabulary has unsupported characters (NULL is ignored and does not produce this error).
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_utf_buffer_increment(). Errors (with error bit) from: f_utf_is_word_dash_plus().
+.SH PARAMETERS
+.TP
+.B vocabulary
+The IKI vocabulary.
+
+.TP
+.B content
+The IKI content.
+
+.TP
+.B quote
+The quote to use.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIf_iki_content_is\fP(3), \fIf_iki_content_partial_is\fP(3), \fIf_iki_eki_read\fP(3), \fIf_iki_eki_write\fP(3), \fIf_iki_object_is\fP(3), \fIf_iki_object_partial_is\fP(3), \fIf_iki_read\fP(3), \fIf_iki_write\fP(3), \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_utf_buffer_increment()\fP, \fIf_utf_is_word_dash_plus()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_utf_buffer_increment()\fP, \fIf_utf_is_word_dash_plus()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_limit/data/documentation/man/man3/f_limit_process.3 b/level_0/f_limit/data/documentation/man/man3/f_limit_process.3
new file mode 100644 (file)
index 0000000..512964a
--- /dev/null
@@ -0,0 +1,51 @@
+.TH f_limit_process "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_limit_process \-
+.SH SYNOPSIS
+.nf
+.B #include <limit.h>
+.sp
+\fBf_status_t f_limit_process\fP(
+    \fBconst pid_t                  \fP\fIid\fP,
+    \fBconst int                    \fP\fItype\fP,
+    \fBconst f_limit_value_t *const \fP\fIvalue_next\fP,
+    \fBf_limit_value_t *const       \fP\fIvalue_current\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get or set the resource limits for some process.
+.PP
+Either value_next or value_current must be non-zero.
+.SH PARAMETERS
+.TP
+.B id
+The PID to set the resources of.
+
+.TP
+.B type
+The resource type to set limit of or get limit of.
+
+.TP
+.B value_next
+The resource value to assign. If 0 is used instead of a valid value, then value_current must be non-zero and will be populated with the current resource value.
+
+.TP
+.B value_current
+The resource value currently assigned. If 0, then value_next is assigning the value but the previous value will not be returned. If both value_next and value_current are non-zero, then this represents the value prior to the assignment of value_next.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_address_not (with error bit) if a pointer is outside of valid address space. F_found_not (with error bit) if no process by the given PID was found. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform this action.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlimit.h\fP(3), \fIf_limit_process\fP(3), \fIprlimit()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_limit/data/documentation/man/man3/f_limit_setss_delete_callback.3 b/level_0/f_limit/data/documentation/man/man3/f_limit_setss_delete_callback.3
new file mode 100644 (file)
index 0000000..896835f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_limit_setss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_limit_setss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_limit_setss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_limit_setss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_limit_setss_delete_callback\fP(3), \fIf_limit_setss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_limit/data/documentation/man/man3/f_limit_setss_destroy_callback.3 b/level_0/f_limit/data/documentation/man/man3/f_limit_setss_destroy_callback.3
new file mode 100644 (file)
index 0000000..a51995c
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_limit_setss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_limit_setss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <set.h>
+.sp
+\fBf_status_t f_limit_setss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_limit_setss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIset.h\fP(3), \fIf_limit_setss_delete_callback\fP(3), \fIf_limit_setss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_limit/data/documentation/man/man3/f_limit_valuess_delete_callback.3 b/level_0/f_limit/data/documentation/man/man3/f_limit_valuess_delete_callback.3
new file mode 100644 (file)
index 0000000..ebfb945
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_limit_valuess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_limit_valuess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <value.h>
+.sp
+\fBf_status_t f_limit_valuess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_limit_valuess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIvalue.h\fP(3), \fIf_limit_valuess_delete_callback\fP(3), \fIf_limit_valuess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_limit/data/documentation/man/man3/f_limit_valuess_destroy_callback.3 b/level_0/f_limit/data/documentation/man/man3/f_limit_valuess_destroy_callback.3
new file mode 100644 (file)
index 0000000..be6a421
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_limit_valuess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_limit_valuess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <value.h>
+.sp
+\fBf_status_t f_limit_valuess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_limit_valuess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIvalue.h\fP(3), \fIf_limit_valuess_delete_callback\fP(3), \fIf_limit_valuess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_adjust.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_adjust.3
new file mode 100644 (file)
index 0000000..202a532
--- /dev/null
@@ -0,0 +1,55 @@
+.TH f_memory_adjust "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_adjust \-
+.SH SYNOPSIS
+.nf
+.B #include <memory.h>
+.sp
+\fBf_status_t f_memory_adjust\fP(
+    \fBconst size_t          \fP\fIlength_old\fP,
+    \fBconst size_t          \fP\fIlength_new\fP,
+    \fBconst size_t          \fP\fIsize\fP,
+    \fBvoid **restrict const \fP\fIpointer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Securely resize dynamically allocated data.
+.PP
+Will change all data to 0 prior to deallocation.
+.PP
+The pointer address might be changed by realloc().
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length_old
+The total number of blocks representing the length to be resized from.
+
+.TP
+.B length_new
+The total number of blocks representing the length to be resized to.
+
+.TP
+.B size
+The block size, in bytes (size * length = allocated size).
+
+.TP
+.B pointer
+A pointer to the address that will be resized.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there was nothing to do.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImemory.h\fP(3), \fIf_memory_adjust\fP(3), \fIf_memory_delete\fP(3), \fIf_memory_destroy\fP(3), \fIf_memory_new\fP(3), \fIf_memory_new_aligned\fP(3), \fIf_memory_resize\fP(3), \fIcalloc()\fP, \fImemset()\fP, \fIrealloc()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_adjust.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_adjust.3
new file mode 100644 (file)
index 0000000..957bd26
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_memory_array_adjust "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_adjust \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_adjust\fP(
+    \fBconst f_number_unsigned_t           \fP\fIlength\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **restrict const               \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the memory array.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on allocation or de-allocation, then do not use this function.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+Must not be NULL.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The new size to use.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_append.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_append.3
new file mode 100644 (file)
index 0000000..7a5242a
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_memory_array_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_append \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_append\fP(
+    \fBconst void *const                   \fP\fIsource\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **const                        \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source onto the destination array.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on allocation or de-allocation, then do not use this function.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+A literal array structure cannot be directly passed or this may segfault. Bad: { int arr[5] = { 0 }; ... f_memory_array_append(source, width, (void **) &arr, used, size); } Better: { int arr[5] = { 0 }; int *arr_pounter = arr; ... f_memory_array_append(source, width, (void **) &arr_pounter, used, size); }
+.PP
+Must not be NULL.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B source
+A pointer to the source structure to copy from.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array destination.
+
+.TP
+.B used
+The structure.used destination.
+
+.TP
+.B size
+The structure.size destination.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but source is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP, \fImemmove()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_append_all.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_append_all.3
new file mode 100644 (file)
index 0000000..fde7686
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_memory_array_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_append_all\fP(
+    \fBconst void *const                   \fP\fIsources\fP,
+    \fBconst f_number_unsigned_t           \fP\fIamount\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **const                        \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source onto the destination array.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on allocation or de-allocation, then do not use this function.
+.PP
+Warning: This default implementation of this function uses multiplication between the amount and the width. Be careful that the resulting multiplication does not overflow f_number_unsigned_t.
+.PP
+Must not be NULL.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B sources
+A pointer to the source structure to copy from. This is generally a structure.array value.
+
+.TP
+.B amount
+The total length of the sources to copy. The is generally the structure.used value.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array destination.
+
+.TP
+.B used
+The structure.used destination.
+
+.TP
+.B size
+The structure.size destination.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if amount is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fIf_number_unsigned_t\fP, \fImemmove()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_decimate_by.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_decimate_by.3
new file mode 100644 (file)
index 0000000..91dc294
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_memory_array_decimate_by "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_decimate_by \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_decimate_by\fP(
+    \fBconst f_number_unsigned_t           \fP\fIamount\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **restrict const               \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the memory array to a smaller size.
+.PP
+This will resize making the array smaller based on (size - given length). If the given length is too small, then the resize will fail. This will not shrink the size to less than 0.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on de-allocation, then do not use this function.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B amount
+A positive number representing how much to decimate the size by.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_decrease_by.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_decrease_by.3
new file mode 100644 (file)
index 0000000..cb53cae
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_memory_array_decrease_by "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_decrease_by \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_decrease_by\fP(
+    \fBconst f_number_unsigned_t           \fP\fIamount\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **restrict const               \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the memory array to a smaller size.
+.PP
+This will resize making the array smaller based on (size - given length). If the given length is too small, then the resize will fail. This will not shrink the size to less than 0.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on de-allocation, then do not use this function.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B amount
+A positive number representing how much to decrease the size by.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_increase.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_increase.3
new file mode 100644 (file)
index 0000000..8997b89
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_memory_array_increase "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_increase \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_increase\fP(
+    \fBconst f_number_unsigned_t           \fP\fIstep\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **restrict const               \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increase the size of the memory array if and only if (used + 1 > size).
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on allocation, then do not use this function.
+.PP
+This does not guarantee the size increased to be increased by the given step. There may be some practices that result in the step being increased by a smaller amount.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+Must not be NULL.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory.. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B step
+The allocation step to use.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (used + 1 <= size).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_increase_by.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_increase_by.3
new file mode 100644 (file)
index 0000000..61a6978
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_memory_array_increase_by "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_increase_by \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_increase_by\fP(
+    \fBconst f_number_unsigned_t           \fP\fIamount\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **restrict const               \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increase the size of the memory array by the given amount if and only if (used + amount > size).
+.PP
+This will resize making the array larger based on the given length.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on allocation, then do not use this function.
+.PP
+This does guarantee the size to be increased by the given amount, but only when (used + amount > size).
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid. F_array_too_large (with error bit) if the new array length is too large.
+.SH PARAMETERS
+.TP
+.B amount
+A positive number representing how much to increase the size by.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (used + amount <= size).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_array_resize.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_array_resize.3
new file mode 100644 (file)
index 0000000..93198fd
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_memory_array_resize "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_array_resize \-
+.SH SYNOPSIS
+.nf
+.B #include <array.h>
+.sp
+\fBf_status_t f_memory_array_resize\fP(
+    \fBconst f_number_unsigned_t           \fP\fIlength\fP,
+    \fBconst size_t                        \fP\fIwidth\fP,
+    \fBvoid **restrict const               \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the memory array.
+.PP
+This function is only useful for simple structures of the form "{ array, used, size }" where the array is a simple type. If the simple type that is "array" requires additional memory manipulation on allocation or de-allocation, then do not use this function.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+Must not be NULL.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The new size to use.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarray.h\fP(3), \fIf_memory_array_adjust\fP(3), \fIf_memory_array_append\fP(3), \fIf_memory_array_append_all\fP(3), \fIf_memory_array_decimate_by\fP(3), \fIf_memory_array_decrease_by\fP(3), \fIf_memory_array_increase\fP(3), \fIf_memory_array_increase_by\fP(3), \fIf_memory_array_resize\fP(3), \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_arrays_adjust.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_arrays_adjust.3
new file mode 100644 (file)
index 0000000..b00393c
--- /dev/null
@@ -0,0 +1,75 @@
+.TH f_memory_arrays_adjust "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_arrays_adjust \-
+.SH SYNOPSIS
+.nf
+.B #include <arrays.h>
+.sp
+\fBf_status_t f_memory_arrays_adjust\fP(
+    \fBconst f_number_unsigned_t                                                                         \fP\fIlength\fP,
+    \fBconst size_t                                                                                      \fP\fIwidth\fP,
+    \fBvoid **const                                                                                      \fP\fIarray\fP,
+    \fBf_number_unsigned_t *const                                                                        \fP\fIused\fP,
+    \fBf_number_unsigned_t *const                                                                        \fP\fIsize\fP,
+    \fBf_status_t(*)(const f_number_unsigned_t start, const f_number_unsigned_t size, void *const array) \fP\fIcallback\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the memory array of arrays.
+.PP
+This function is only useful for structures of the form "{ array, used, size }" where the array is a an array of simple types. If the simple type that is "array" requires additional memory manipulation on allocation or de-allocation, then do not use this function.
+.PP
+The inner array can be a more complex structure because the callback is expected to know the type.
+.PP
+Use f_memory_array_adjust() instead if a callback is not needed.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+This is only called when the requested length is less than the given size.
+.PP
+array: The array structure to delete all values of.
+.PP
+Callback Returns: The standard status codes similar to this function.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The new size to use.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.TP
+.B callback
+A callback to call on each array value when reducing the length of the array. This callback is expected to know the appropriate type and will cast the structure parameter to the appropriate type. This callback is intended to be used for deleting data and does not get called when adding new data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarrays.h\fP(3), \fIf_memory_arrays_adjust\fP(3), \fIf_memory_arrays_resize\fP(3), \fIf_memory_array_adjust()\fP, \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_arrays_resize.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_arrays_resize.3
new file mode 100644 (file)
index 0000000..1a2db2a
--- /dev/null
@@ -0,0 +1,75 @@
+.TH f_memory_arrays_resize "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_arrays_resize \-
+.SH SYNOPSIS
+.nf
+.B #include <arrays.h>
+.sp
+\fBf_status_t f_memory_arrays_resize\fP(
+    \fBconst f_number_unsigned_t                                                                         \fP\fIlength\fP,
+    \fBconst size_t                                                                                      \fP\fIwidth\fP,
+    \fBvoid **restrict const                                                                             \fP\fIarray\fP,
+    \fBf_number_unsigned_t *restrict const                                                               \fP\fIused\fP,
+    \fBf_number_unsigned_t *restrict const                                                               \fP\fIsize\fP,
+    \fBf_status_t(*)(const f_number_unsigned_t start, const f_number_unsigned_t size, void *const array) \fP\fIcallback\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the memory array of arrays.
+.PP
+This function is only useful for structures of the form "{ array, used, size }" where the array is a an array of simple types. If the simple type that is "array" requires additional memory manipulation on allocation or de-allocation, then do not use this function.
+.PP
+The inner array can be a more complex structure because the callback is expected to know the type.
+.PP
+Use f_memory_array_resize() instead if a callback is not needed.
+.PP
+This size represents the array type and not an inner types. For example, f_stringss_dynamic_t has an array of f_strings_dynamic_t. This size would be sizeof(f_strings_dynamic_t). This would neither be a size of (f_char_t) nor would it be a size of f_strings_dynamicss_t.
+.PP
+This is only called when the requested length is less than the given size.
+.PP
+array: The array structure to delete all values of.
+.PP
+Callback Returns: The standard status codes similar to this function.
+.PP
+F_array_too_large (with error bit) if the new array length is too large. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The new size to use.
+
+.TP
+.B width
+The size of the structure represented by array. The word "width" is used due to conflicts of already using "length" and "size".
+
+.TP
+.B array
+The structure.array to resize.
+
+.TP
+.B used
+The structure.used.
+
+.TP
+.B size
+The structure.size.
+
+.TP
+.B callback
+A callback to call on each array value when reducing the length of the array. This callback is expected to know the appropriate type and will cast the structure parameter to the appropriate type. This callback is intended to be used for deleting data and does not get called when adding new data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIarrays.h\fP(3), \fIf_memory_arrays_adjust\fP(3), \fIf_memory_arrays_resize\fP(3), \fIf_memory_array_resize()\fP, \fI(f_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_delete.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_delete.3
new file mode 100644 (file)
index 0000000..f90856a
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_memory_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <memory.h>
+.sp
+\fBf_status_t f_memory_delete\fP(
+    \fBconst size_t          \fP\fIlength\fP,
+    \fBconst size_t          \fP\fIsize\fP,
+    \fBvoid **restrict const \fP\fIpointer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete dynamically allocated data.
+.PP
+Will not change any of the data to 0 prior to deallocation.
+.PP
+Type and length are not normally used by this function but must be provided for the cases when f_memory_delete is swapped with f_memory_destroy (or vice-versa).
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The total number of blocks to be allocated. If length is 0 then no delete is performed.
+
+.TP
+.B size
+The block size, in bytes (size * length = allocated size). If size is 0 then no delete is performed.
+
+.TP
+.B pointer
+A pointer to the address that will be freed.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there was nothing to do.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImemory.h\fP(3), \fIf_memory_adjust\fP(3), \fIf_memory_delete\fP(3), \fIf_memory_destroy\fP(3), \fIf_memory_new\fP(3), \fIf_memory_new_aligned\fP(3), \fIf_memory_resize\fP(3), \fIfree()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_destroy.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_destroy.3
new file mode 100644 (file)
index 0000000..cf54029
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_memory_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <memory.h>
+.sp
+\fBf_status_t f_memory_destroy\fP(
+    \fBconst size_t          \fP\fIlength\fP,
+    \fBconst size_t          \fP\fIsize\fP,
+    \fBvoid **restrict const \fP\fIpointer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Securely deletes some dynamically allocated data.
+.PP
+Will change all data to 0 prior to deallocation.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The total number of blocks to be allocated. If length is 0 then no delete is performed.
+
+.TP
+.B size
+The block size, in bytes (size * length = allocated size). If size is 0 then no delete is performed.
+
+.TP
+.B pointer
+A pointer to the address that will be freed.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there was nothing to do.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImemory.h\fP(3), \fIf_memory_adjust\fP(3), \fIf_memory_delete\fP(3), \fIf_memory_destroy\fP(3), \fIf_memory_new\fP(3), \fIf_memory_new_aligned\fP(3), \fIf_memory_resize\fP(3), \fIfree()\fP, \fImemset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_new.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_new.3
new file mode 100644 (file)
index 0000000..aa9dd8e
--- /dev/null
@@ -0,0 +1,46 @@
+.TH f_memory_new "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_new \-
+.SH SYNOPSIS
+.nf
+.B #include <memory.h>
+.sp
+\fBf_status_t f_memory_new\fP(
+    \fBconst size_t          \fP\fIlength\fP,
+    \fBconst size_t          \fP\fIsize\fP,
+    \fBvoid **restrict const \fP\fIpointer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create some dynamically allocated array of some length.
+.PP
+F_memory_not (with error bit) on allocation error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The total number of blocks to be allocated. Must be greater than 0.
+
+.TP
+.B size
+The block size, in bytes (size * length = allocated size). Must be greater than 0.
+
+.TP
+.B pointer
+A pointer that will be updated to the address of the newly allocated memory.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there was nothing to do.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImemory.h\fP(3), \fIf_memory_adjust\fP(3), \fIf_memory_delete\fP(3), \fIf_memory_destroy\fP(3), \fIf_memory_new\fP(3), \fIf_memory_new_aligned\fP(3), \fIf_memory_resize\fP(3), \fIcalloc()\fP, \fImemset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_new_aligned.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_new_aligned.3
new file mode 100644 (file)
index 0000000..c14bed9
--- /dev/null
@@ -0,0 +1,46 @@
+.TH f_memory_new_aligned "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_new_aligned \-
+.SH SYNOPSIS
+.nf
+.B #include <memory.h>
+.sp
+\fBf_status_t f_memory_new_aligned\fP(
+    \fBconst size_t          \fP\fIlength\fP,
+    \fBconst size_t          \fP\fIalignment\fP,
+    \fBvoid **restrict const \fP\fIpointer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create some dynamically allocated array of some length, guaranteeing aligned memory.
+.PP
+F_memory_not (with error bit) on allocation error. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length
+The total number of blocks to be allocated. Must be greater than 0. Must be a multiple of alignment.
+
+.TP
+.B alignment
+The size of the alignment, such as sizeof(void *). Must be greater than 0.
+
+.TP
+.B pointer
+A pointer that will be updated to the address of the newly allocated memory.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there was nothing to do.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImemory.h\fP(3), \fIf_memory_adjust\fP(3), \fIf_memory_delete\fP(3), \fIf_memory_destroy\fP(3), \fIf_memory_new\fP(3), \fIf_memory_new_aligned\fP(3), \fIf_memory_resize\fP(3), \fIaligned_alloc()\fP, \fIposix_memalign()\fP, \fImemset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_memory/data/documentation/man/man3/f_memory_resize.3 b/level_0/f_memory/data/documentation/man/man3/f_memory_resize.3
new file mode 100644 (file)
index 0000000..19b64d0
--- /dev/null
@@ -0,0 +1,55 @@
+.TH f_memory_resize "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_memory_resize \-
+.SH SYNOPSIS
+.nf
+.B #include <memory.h>
+.sp
+\fBf_status_t f_memory_resize\fP(
+    \fBconst size_t          \fP\fIlength_old\fP,
+    \fBconst size_t          \fP\fIlength_new\fP,
+    \fBconst size_t          \fP\fIsize\fP,
+    \fBvoid **restrict const \fP\fIpointer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize dynamically allocated data.
+.PP
+Will not change any of the data prior to deallocation.
+.PP
+The pointer address might be changed by realloc().
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B length_old
+The total number of blocks representing the length to be resized from.
+
+.TP
+.B length_new
+The total number of blocks representing the length to be resized to.
+
+.TP
+.B size
+The block size, in bytes (size * length = allocated size).
+
+.TP
+.B pointer
+A pointer to the address that will be resized.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there was nothing to do.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImemory.h\fP(3), \fIf_memory_adjust\fP(3), \fIf_memory_delete\fP(3), \fIf_memory_destroy\fP(3), \fIf_memory_new\fP(3), \fIf_memory_new_aligned\fP(3), \fIf_memory_resize\fP(3), \fIcalloc()\fP, \fImemset()\fP, \fIrealloc()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_from_host_long.3 b/level_0/f_network/data/documentation/man/man3/f_network_from_host_long.3
new file mode 100644 (file)
index 0000000..5c05916
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_network_from_host_long "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_from_host_long \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_from_host_long\fP(
+    \fBconst uint32_t  \fP\fIfrom\fP,
+    \fBuint32_t *const \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from host byte order to network byte order for an unsigned long integer.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B from
+The long integer in host byte order.
+
+.TP
+.B to
+The converted long integer in network byte order.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIhtonl()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_from_host_short.3 b/level_0/f_network/data/documentation/man/man3/f_network_from_host_short.3
new file mode 100644 (file)
index 0000000..4b898c0
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_network_from_host_short "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_from_host_short \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_from_host_short\fP(
+    \fBconst uint16_t  \fP\fIfrom\fP,
+    \fBuint16_t *const \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from host byte order to network byte order for an unsigned short integer.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B from
+The short integer in host byte order.
+
+.TP
+.B to
+The converted short integer in network byte order.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIhtons()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_from_ip_address.3 b/level_0/f_network/data/documentation/man/man3/f_network_from_ip_address.3
new file mode 100644 (file)
index 0000000..dcaf27d
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_network_from_ip_address "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_from_ip_address \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_from_ip_address\fP(
+    \fBconst f_network_family_ip_t \fP\fIfrom\fP,
+    \fBstruct hostent *const       \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from a IP version 4 or version 6 family integer into a network IP address host entity.
+.PP
+This is for the Domain Name and is not for the IP address digit itself.
+.PP
+Some libc implementation may not properly clean up after calling gethostbyaddr() under certain cases, like on error or DNS entry not found. This can result in still reachable memory when the program exists. This is the fault of the particular libc in use, but testing to rule this out should still be considered.
+.PP
+F_again (with error bit) Resolver temporarily failed, try again. F_data_not (with error bit) The requested name is valid, but does not have an IP address. F_found_not (with error bit) Resolver did not know host. F_recover_not (with error bit) Resolver failed and cannot recover from the failure, do not try again. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B from
+The IP version 4 or version 6 family integer.
+
+.TP
+.B to
+The converted IP host entity.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing an IP address version 4 or 6.
+.PP
+address: The address data.
+.PP
+clear: Clear the union values.
+.sp
+.RS
+.nf
+\fB
+struct f_network_family_ip_t {
+  uint8_t                      \fItype\fP;
+  f_network_family_ip_4_or_6_t \fIaddress\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to convert (to.type is f_network_family_none_e).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIgethostbyaddr()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_from_ip_name.3 b/level_0/f_network/data/documentation/man/man3/f_network_from_ip_name.3
new file mode 100644 (file)
index 0000000..f31d666
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_network_from_ip_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_from_ip_name \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_from_ip_name\fP(
+    \fBconst f_string_static_t \fP\fIfrom\fP,
+    \fBstruct hostent *const   \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from a Domain Name into a network IP address host entity.
+.PP
+This is for the Domain Name and is not for the IP address digit itself.
+.PP
+Some libc implementation may not properly clean up after calling gethostbyname() under certain cases, like on error or DNS entry not found. This can result in still reachable memory when the program exists. This is the fault of the particular libc in use, but testing to rule this out should still be considered.
+.PP
+F_again (with error bit) Resolver temporarily failed, try again. F_data_not (with error bit) The requested name is valid, but does not have an IP address. F_found_not (with error bit) Resolver did not know host. F_recover_not (with error bit) Resolver failed and cannot recover from the failure, do not try again. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B from
+The human-friendly IP Domain Name.
+
+.TP
+.B to
+The converted IP host entity.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to convert (from.used is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIgethostbyname()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_from_ip_string.3 b/level_0/f_network/data/documentation/man/man3/f_network_from_ip_string.3
new file mode 100644 (file)
index 0000000..b214e46
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_network_from_ip_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_from_ip_string \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_from_ip_string\fP(
+    \fBconst f_string_static_t      \fP\fIfrom\fP,
+    \fBf_network_family_ip_t *const \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from a human-friendly string representing the IP address digit into a network IP address digit.
+.PP
+This is for the IP address and is not for the Domain Name.
+.PP
+F_address_not (with error bit) if from is not a valid address. F_parameter (with error bit) if a parameter is invalid. F_space_not (with error bit) if not enough space is available in to.string. F_support_not (with error bit) if an invalid address family type is passed to inet_pton(). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B from
+The human-friendly IP address string.
+
+.TP
+.B to
+The converted IP version 4 or version 6 family integer. For IPv6, the use of a port number requires the address to be encases in brackets, like: [::1]:80.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing an IP address version 4 or 6.
+.PP
+address: The address data.
+.PP
+clear: Clear the union values.
+.sp
+.RS
+.nf
+\fB
+struct f_network_family_ip_t {
+  uint8_t                      \fItype\fP;
+  f_network_family_ip_4_or_6_t \fIaddress\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to convert (to.type is f_network_family_none_e or from.used is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIinet_pton()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_is_ip_address.3 b/level_0/f_network/data/documentation/man/man3/f_network_is_ip_address.3
new file mode 100644 (file)
index 0000000..3dcee7e
--- /dev/null
@@ -0,0 +1,109 @@
+.TH f_network_is_ip_address "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_is_ip_address \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBvoid f_network_is_ip_address\fP(
+    \fBconst f_string_static_t \fP\fIaddress\fP,
+    \fBf_range_double_t *const \fP\fIwhere\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a string is a valid IPv4 or IPv6 address, including the optional port number.
+.PP
+This does not fully validate the numbers. This only checks that the address is in the proper form.
+.PP
+For IPv6, this only accepts port numbers when the IPv6 address is wrapped in brackets ('[' (U+005B) and ']' (U+005D)).
+.PP
+This allows NULL characters to exist within the IP address, but the standard POSIX/libc does not. The address from this string should be sanitized to not have NULL characters before passing to a POSIX/libc function.
+.PP
+Notice that for IPv6, the address of '::1's does not include the open and close brackets. Notice that for both the IPv4 and the IPv6, the address and port number do not include the colon separating the address from the port.
+.PP
+The goal here is to be able to present the strings to functions like inet_pton().
+.PP
+The start_1 to stop_1 range represents the address part. The start_2 to stop_2 range represents the port part (start_2 will be greater than stop_2 if there is no port).
+.PP
+On any error, this value is not changed. If the given address is not valid, then this value is not changed.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_data_not on success but there is nothing to process (address.used is 0). F_false on success, but this is not an IP Address (could still look close to an IPv4 or IPv6 address). F_network_version_four_not on success, but this is not an IP Address but looks close to a IPv4 address. F_network_version_six_not on success, but this is not an IP Address but looks close to a IPv6 address. F_network_version_four on success and this is an IPv4 address. F_network_version_six on success and this is an IPv6 address.
+.PP
+F_interrupt (with or without error bit) if stopping due to an interrupt.
+.SH PARAMETERS
+.TP
+.B address
+The string to parse.
+
+.TP
+.B where
+(optional) This utilizes a strange range where the first set (start_1 to stop_1) represents the address range and the second set (start_2 to stop_2) represents the port range. For IPv4, an address of '127.0.0.1:123' would have the first set represent '127.0.0.1' and the second set represent '123'. For IPv6, an address of '[::1]:123' would have the first set represent '::1' and the second set represent '123'.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating two start and stop ranges for some string(s).
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop_2: The second stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_double_t {
+  f_number_unsigned_t \fIstart_1\fP;
+  f_number_unsigned_t \fIstop_1\fP;
+  f_number_unsigned_t \fIstart_2\fP;
+  f_number_unsigned_t \fIstop_2\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_to_host_long.3 b/level_0/f_network/data/documentation/man/man3/f_network_to_host_long.3
new file mode 100644 (file)
index 0000000..1fdebac
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_network_to_host_long "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_to_host_long \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_to_host_long\fP(
+    \fBconst uint32_t  \fP\fIfrom\fP,
+    \fBuint32_t *const \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from network byte order to host byte order for an unsigned long integer.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B from
+The long integer in network byte order.
+
+.TP
+.B to
+The converted long integer in host byte order.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIntohl()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_to_host_short.3 b/level_0/f_network/data/documentation/man/man3/f_network_to_host_short.3
new file mode 100644 (file)
index 0000000..5119c51
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_network_to_host_short "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_to_host_short \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_to_host_short\fP(
+    \fBconst uint16_t  \fP\fIfrom\fP,
+    \fBuint16_t *const \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from network byte order to host byte order for an unsigned short integer.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B from
+The short integer in network byte order.
+
+.TP
+.B to
+The converted short integer in host byte order.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIntohs()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_network/data/documentation/man/man3/f_network_to_ip_string.3 b/level_0/f_network/data/documentation/man/man3/f_network_to_ip_string.3
new file mode 100644 (file)
index 0000000..f98b066
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_network_to_ip_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_network_to_ip_string \-
+.SH SYNOPSIS
+.nf
+.B #include <network.h>
+.sp
+\fBf_status_t f_network_to_ip_string\fP(
+    \fBconst f_network_family_ip_t \fP\fIfrom\fP,
+    \fBf_string_dynamic_t *const   \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert from a network IP address digit into a human-friendly string representing the IP address digit.
+.PP
+This is for the IP address and is not for the Domain Name.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_space_not (with error bit) if not enough space is available in to.string. F_support_not (with error bit) if an invalid address family type is passed to inet_ntop(). F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by()
+.SH PARAMETERS
+.TP
+.B from
+The IP version 4 or version 6 family integer.
+
+.TP
+.B to
+The converted human-friendly IP address string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing an IP address version 4 or 6.
+.PP
+address: The address data.
+.PP
+clear: Clear the union values.
+.sp
+.RS
+.nf
+\fB
+struct f_network_family_ip_t {
+  uint8_t                      \fItype\fP;
+  f_network_family_ip_4_or_6_t \fIaddress\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to convert (from.type is f_network_family_none_e).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fInetwork.h\fP(3), \fIf_network_from_host_long\fP(3), \fIf_network_from_host_short\fP(3), \fIf_network_from_ip_address\fP(3), \fIf_network_from_ip_name\fP(3), \fIf_network_from_ip_string\fP(3), \fIf_network_is_ip_address\fP(3), \fIf_network_to_host_long\fP(3), \fIf_network_to_host_short\fP(3), \fIf_network_to_ip_string\fP(3), \fIf_memory_array_increase_by()\fP, \fIinet_ntop()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_partial_fll_identify.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_partial_fll_identify.3
new file mode 100644 (file)
index 0000000..fbf165a
--- /dev/null
@@ -0,0 +1,121 @@
+.TH f_parse_dynamic_partial_fll_identify "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_dynamic_partial_fll_identify \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_dynamic_partial_fll_identify\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP,
+    \fBf_fll_id_t *const       \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the given string represents a single valid FLL Identifier and possibly save the FLL Identifier.
+.PP
+This will always change the FLL Identifier used and type codes, if a FLL Identifier is provided.
+.PP
+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.
+.PP
+A valid FLL Identifier must terminate on either whitespace, EOL, or the stop point (length).
+.PP
+The id.name might not be NULL terminated. An id.name using all 64-bytes will not be NULL terminated.
+.PP
+If a newline ("\n") is encountered, range->start will be set to 1 byte after the newline.
+.PP
+Set to NULL to not use.
+.PP
+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.
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B 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.
+
+.TP
+.B id
+(optional) The FLL Identifier found.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_fll_id_t {
+  char     \fIname\fP[64];
+  uint16_t \fItype\fP;
+  uint8_t  \fIused\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_data_not if length is 0. F_data_not_eos on success, but the range.start >= buffer.used. F_data_not_stop on success, but the range.start > range.stop. F_found if the buffer does represent a valid FLL Identifier. F_found_not if the buffer does not represent a valid FLL Identifier.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_word()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_word()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_to_utf_character.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_to_utf_character.3
new file mode 100644 (file)
index 0000000..fac3d88
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_parse_dynamic_seek_line_to_utf_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_dynamic_seek_line_to_utf_character \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_dynamic_seek_line_to_utf_character\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_utf_char_t      \fP\fIseek_to_this\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the character (up to 4-byte wide) or EOL is reached.
+.PP
+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_complete_not_utf_eos (with error bit) if the end of buffer 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.
+.PP
+Errors (with error bit) from: f_utf_char_to_character().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to traverse.
+
+.TP
+.B seek_to_this
+A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_eos on success, but stopped at end of buffer. F_okay_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_eos on success, but the range.start >= buffer.used. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_char_to_character()\fP, \fIf_utf_char_to_character()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_until_graph.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_until_graph.3
new file mode 100644 (file)
index 0000000..e3775ad
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_parse_dynamic_seek_line_until_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_dynamic_seek_line_until_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_dynamic_seek_line_until_graph\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst uint8_t           \fP\fIplaceholder\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment buffer location until a graph character (including UTF-8) or an EOL is matched.
+.PP
+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_complete_not_utf_eos (with error bit) if the end of buffer 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.
+.PP
+Errors (with error bit) from: f_utf_is_graph().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to traverse.
+
+.TP
+.B placeholder
+A single-width character representing a placeholder to ignore (may be NULL).
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_eos on success, but stopped at end of buffer. F_okay_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_eos on success, but the range.start >= buffer.used. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_is_graph()\fP, \fIf_utf_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_until_graph_non.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_line_until_graph_non.3
new file mode 100644 (file)
index 0000000..ade6b4b
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_parse_dynamic_seek_line_until_graph_non "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_dynamic_seek_line_until_graph_non \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_dynamic_seek_line_until_graph_non\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst uint8_t           \fP\fIplaceholder\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment buffer location until a non-graph character (including UTF-8) or an EOL is matched.
+.PP
+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_complete_not_utf_eos (with error bit) if the end of buffer 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.
+.PP
+Errors (with error bit) from: f_utf_is_graph().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to traverse.
+
+.TP
+.B placeholder
+A single-width character representing a placeholder to ignore (may be NULL).
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_eos on success, but stopped at end of buffer. F_okay_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_eos on success, but the range.start >= buffer.used. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_is_graph()\fP, \fIf_utf_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_to_utf_character.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_dynamic_seek_to_utf_character.3
new file mode 100644 (file)
index 0000000..e117c38
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_parse_dynamic_seek_to_utf_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_dynamic_seek_to_utf_character \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_dynamic_seek_to_utf_character\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_utf_char_t      \fP\fIseek_to_this\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the UTF-8 character (up to 4-byte wide) is reached.
+.PP
+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_complete_not_utf_eos (with error bit) if the end of buffer 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.
+.PP
+Errors (with error bit) from: f_utf_char_to_character().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to traverse.
+
+.TP
+.B seek_to_this
+A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_eos on success, but stopped at end of buffer. F_okay_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_eos on success, but the range.start >= buffer.used. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_char_to_character()\fP, \fIf_utf_char_to_character()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_to_utf_character.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_to_utf_character.3
new file mode 100644 (file)
index 0000000..e882fb9
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_parse_seek_line_to_utf_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_seek_line_to_utf_character \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_seek_line_to_utf_character\fP(
+    \fBconst f_string_t   \fP\fIstring\fP,
+    \fBconst f_utf_char_t \fP\fIseek_to\fP,
+    \fBf_range_t *const   \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the character (up to 4-byte wide) or EOL is reached.
+.PP
+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.
+.PP
+Errors (with error bit) from: f_utf_char_to_character().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_char_to_character()\fP, \fIf_utf_char_to_character()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_until_graph.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_until_graph.3
new file mode 100644 (file)
index 0000000..80308cb
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_parse_seek_line_until_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_seek_line_until_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_seek_line_until_graph\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst uint8_t    \fP\fIplaceholder\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment string location until a graph character (including UTF-8) or an EOL is matched.
+.PP
+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.
+.PP
+Errors (with error bit) from: f_utf_is_graph().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B placeholder
+A single-width character representing a placeholder to ignore (may be NULL).
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_is_graph()\fP, \fIf_utf_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_until_graph_non.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_seek_line_until_graph_non.3
new file mode 100644 (file)
index 0000000..7f6b526
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_parse_seek_line_until_graph_non "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_seek_line_until_graph_non \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_seek_line_until_graph_non\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst uint8_t    \fP\fIplaceholder\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment string location until a non-graph character (including UTF-8) or an EOL is matched.
+.PP
+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.
+.PP
+F_parameter (with error bit) from: f_utf_is_combining(). F_parameter (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B placeholder
+A single-width character representing a placeholder to ignore (may be NULL).
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_stop on success, but stopped stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_seek_to_utf_character.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_seek_to_utf_character.3
new file mode 100644 (file)
index 0000000..54d5456
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_parse_seek_to_utf_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_seek_to_utf_character \-
+.SH SYNOPSIS
+.nf
+.B #include <parse.h>
+.sp
+\fBf_status_t f_parse_seek_to_utf_character\fP(
+    \fBconst f_string_t   \fP\fIstring\fP,
+    \fBconst f_utf_char_t \fP\fIseek_to\fP,
+    \fBf_range_t *const   \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the UTF-8 character (up to 4-byte wide) is reached.
+.PP
+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.
+.PP
+Errors (with error bit) from: f_utf_char_to_character().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A 1-width, 2-width, 3-width, or 4-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIparse.h\fP(3), \fIf_parse_dynamic_partial_fll_identify\fP(3), \fIf_parse_dynamic_seek_line_to_utf_character\fP(3), \fIf_parse_dynamic_seek_line_until_graph\fP(3), \fIf_parse_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_dynamic_seek_to_utf_character\fP(3), \fIf_parse_seek_line_to_utf_character\fP(3), \fIf_parse_seek_line_until_graph\fP(3), \fIf_parse_seek_line_until_graph_non\fP(3), \fIf_parse_seek_to_utf_character\fP(3), \fIf_utf_char_to_character()\fP, \fIf_utf_char_to_character()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_to_char.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_to_char.3
new file mode 100644 (file)
index 0000000..54edfaa
--- /dev/null
@@ -0,0 +1,90 @@
+.TH f_parse_utf_dynamic_seek_line_to_char "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_dynamic_seek_line_to_char \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_dynamic_seek_line_to_char\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBconst f_char_t              \fP\fIseek_to_this\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the (1-byte wide) character or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.TP
+.B seek_to_this
+A single-width character.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_until_graph.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_until_graph.3
new file mode 100644 (file)
index 0000000..b6f6b44
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_parse_utf_dynamic_seek_line_until_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_dynamic_seek_line_until_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_dynamic_seek_line_until_graph\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBconst f_utf_char_t          \fP\fIplaceholder\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment buffer location until a graph character or an EOL is matched.
+.PP
+F_parameter (with error bit) if a parameter is invalid F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_graph().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations.
+
+.TP
+.B placeholder
+A UTF-8 character representing a placeholder to ignore (may be NULL).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3), \fIf_utf_character_is_graph()\fP, \fIf_utf_character_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_until_graph_non.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_line_until_graph_non.3
new file mode 100644 (file)
index 0000000..d789adb
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_parse_utf_dynamic_seek_line_until_graph_non "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_dynamic_seek_line_until_graph_non \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_dynamic_seek_line_until_graph_non\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBconst f_utf_char_t          \fP\fIplaceholder\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment buffer location until a non-graph character or an EOL is matched.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_graph().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations.
+
+.TP
+.B placeholder
+A single-width character representing a placeholder to ignore (may be NULL).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_eos on success, but stopped at end of buffer. F_okay_stop on success, but stopped stop location. F_data_not if buffer length is 0. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3), \fIf_utf_character_is_graph()\fP, \fIf_utf_character_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_to_char.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_dynamic_seek_to_char.3
new file mode 100644 (file)
index 0000000..3efc48f
--- /dev/null
@@ -0,0 +1,90 @@
+.TH f_parse_utf_dynamic_seek_to_char "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_dynamic_seek_to_char \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_dynamic_seek_to_char\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBconst f_char_t              \fP\fIseek_to_this\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the UTF-8 character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.TP
+.B seek_to_this
+A single-width non-UTF-8 character.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of buffer. F_okay_stop on success, but stopped stop location. F_data_not if buffer length is 0. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_to_char.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_to_char.3
new file mode 100644 (file)
index 0000000..624a65c
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_parse_utf_seek_line_to_char "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_seek_line_to_char \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_seek_line_to_char\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBf_range_t *const     \fP\fIrange\fP,
+    \fBconst f_char_t       \fP\fIseek_to_this\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the 1-byte wide character or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.TP
+.B seek_to_this
+A single-width character.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_eos on success, but stopped at end of buffer. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_until_graph.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_until_graph.3
new file mode 100644 (file)
index 0000000..8482d66
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_parse_utf_seek_line_until_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_seek_line_until_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_seek_line_until_graph\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBf_range_t *const     \fP\fIrange\fP,
+    \fBconst f_utf_char_t   \fP\fIplaceholder\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment string location until a UTF-8 graph character or an EOL is matched.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_graph().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.TP
+.B placeholder
+A UTF-8 character representing a placeholder to ignore (may be NULL).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3), \fIf_utf_character_is_graph()\fP, \fIf_utf_character_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_until_graph_non.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_line_until_graph_non.3
new file mode 100644 (file)
index 0000000..6c070f7
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_parse_utf_seek_line_until_graph_non "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_seek_line_until_graph_non \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_seek_line_until_graph_non\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBf_range_t *const     \fP\fIrange\fP,
+    \fBconst f_utf_char_t   \fP\fIplaceholder\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Increment string location until a non-graph UTF-8 character or an EOL is matched.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_graph().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.TP
+.B placeholder
+A UTF-8 character representing a placeholder to ignore (may be NULL).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_stop on success, but stopped stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3), \fIf_utf_character_is_graph()\fP, \fIf_utf_character_is_graph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_to_char.3 b/level_0/f_parse/data/documentation/man/man3/f_parse_utf_seek_to_char.3
new file mode 100644 (file)
index 0000000..2df947e
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_parse_utf_seek_to_char "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_parse_utf_seek_to_char \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_parse_utf_seek_to_char\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBf_range_t *const     \fP\fIrange\fP,
+    \fBconst f_char_t       \fP\fIseek_to_this\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the UTF-8 character (up to 4-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by seek.
+
+.TP
+.B seek_to_this
+A single-width non-UTF-8 character.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of buffer. F_okay_stop on success, but stopped stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_parse_utf_dynamic_seek_line_to_char\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph\fP(3), \fIf_parse_utf_dynamic_seek_line_until_graph_non\fP(3), \fIf_parse_utf_dynamic_seek_to_char\fP(3), \fIf_parse_utf_seek_line_to_char\fP(3), \fIf_parse_utf_seek_line_until_graph\fP(3), \fIf_parse_utf_seek_line_until_graph_non\fP(3), \fIf_parse_utf_seek_to_char\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_change.3 b/level_0/f_path/data/documentation/man/man3/f_path_change.3
new file mode 100644 (file)
index 0000000..9aa5e3d
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_path_change "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_change \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_change\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change to a path.
+.PP
+When path.used is 0, then this is treated as an empty string.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_file_found_not if the path was not found. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3), \fIchdir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_change_at.3 b/level_0/f_path/data/documentation/man/man3/f_path_change_at.3
new file mode 100644 (file)
index 0000000..9c59d98
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_path_change_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_change_at \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_change_at\fP(
+    \fBconst int \fP\fIat_id\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change to a path at the given open file descriptor.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_file_found_not if the path was not found. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B at_id
+An open directory file descriptor, in which path is relative to.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3), \fIfchdir()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_current.3 b/level_0/f_path/data/documentation/man/man3/f_path_current.3
new file mode 100644 (file)
index 0000000..2325e64
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_path_current "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_current \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_current\fP(
+    \fBconst uint8_t             \fP\fIreal\fP,
+    \fBf_string_dynamic_t *const \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current path.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_buffer_too_small (with error bit) if the buffer is too small to store the path. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_file_found_not if the path was not found. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B real
+If F_true, then get the real path and will result in an absolute path (resolving symlinks, etc..). Otherwise, this gets the path as it appears to be.
+
+.TP
+.B path
+The (allocated) file path. This will have a max size of F_path_length_max_d + 1. This will be NULL terminated at real->used + 1.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3), \fIgetcwd()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_directory_cleanup.3 b/level_0/f_path/data/documentation/man/man3/f_path_directory_cleanup.3
new file mode 100644 (file)
index 0000000..0e33b39
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_path_directory_cleanup "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_directory_cleanup \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_directory_cleanup\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdirectory\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Ensure that the given directory path string doesn't have redundant path separators.
+.PP
+The directory path is not validated to exist.
+.PP
+Ensures that multiple consecutive '/' following '../' is reduced to only '../' ('..////' would become '../').
+.PP
+The directory string will be NULL terminated after directory.used.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B source
+The south path to cleanup.
+
+.TP
+.B directory
+The cleaned up directory string. The directory string is replaced by this function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_is.3 b/level_0/f_path/data/documentation/man/man3/f_path_is.3
new file mode 100644 (file)
index 0000000..2dae0e7
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_path_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_is \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_is\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a string represents a path string.
+.PP
+This does not check to see if the path exists or not. This does not stop on NULL (NULL characters are ignored).
+.PP
+A string without any path parts that could be a path is not considered a path by this function. That is to say "my_file.txt" is not a path string but "./my_file.txt" is a path string.
+.SH PARAMETERS
+.TP
+.B path
+The string that may or may not represent a path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the string is a path string. F_false if the string is not a path string. F_data_not if the string has a length of 0 or the string is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_is_absolute.3 b/level_0/f_path/data/documentation/man/man3/f_path_is_absolute.3
new file mode 100644 (file)
index 0000000..2528393
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_path_is_absolute "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_is_absolute \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_is_absolute\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a string represents an absolute path string.
+.PP
+This does not check to see if the path exists or not. This does not stop on NULL (NULL characters are ignored).
+.PP
+A string with path parts that start with '/' is an absolute path. That is to say "/my_file.txt" is an absolute path string.
+.SH PARAMETERS
+.TP
+.B path
+The string that may or may not represent an absolute path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the string is an absolute path string. F_false if the string is not an absolute path string. F_data_not if the string has a length of 0 or the string is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_is_relative.3 b/level_0/f_path/data/documentation/man/man3/f_path_is_relative.3
new file mode 100644 (file)
index 0000000..ac32420
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_path_is_relative "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_is_relative \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_is_relative\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a string represents a relative path string.
+.PP
+This does not check to see if the path exists or not. This does not stop on NULL (NULL characters are ignored).
+.PP
+A string without any path parts that could be a path is considered a relative path by this function. That is to say "my_file.txt" is a relative path string.
+.PP
+The strings that are relative to the current path, such as "./my_file.txt", are considered relative by this function.
+.SH PARAMETERS
+.TP
+.B path
+The string that may or may not represent a relative path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the string is a relative path string. F_false if the string is not a relative path string. F_data_not if the string has a length of 0 or the string is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_is_relative_current.3 b/level_0/f_path/data/documentation/man/man3/f_path_is_relative_current.3
new file mode 100644 (file)
index 0000000..cca541a
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_path_is_relative_current "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_is_relative_current \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_is_relative_current\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not a string explicitly represents a relative path string to the current working directory.
+.PP
+This does not check to see if the path exists or not. This does not stop on NULL (NULL characters are ignored).
+.PP
+A string that is explicitly relative to the current working directory must begin with one of "./" or "../".
+.PP
+This does not return true for paths that are implicitly relative, such as "abc".
+.SH PARAMETERS
+.TP
+.B path
+The string that may or may not represent a relative path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if the string is a relative path string. F_false if the string is not a relative path string. F_data_not if the string has a length of 0 or the string is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_path/data/documentation/man/man3/f_path_real.3 b/level_0/f_path/data/documentation/man/man3/f_path_real.3
new file mode 100644 (file)
index 0000000..83e5c55
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_path_real "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_path_real \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t f_path_real\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBf_string_dynamic_t *const \fP\fIreal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the real path for the given path.
+.PP
+This does check to see if the path exists or not (path must exist). This processes all relative parts. This processes all symbolic links. This has a max size of F_path_length_max_d + 1.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_buffer_too_small (with error bit) if the buffer is too small to store the path. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_file_found_not if the path was not found. F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The source path to determine what the real path is. This is a NULL terminated string.
+
+.TP
+.B real
+The (allocated) real file path. This will have a max size of F_path_length_max_d + 1. This will be NULL terminated at real->used + 1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIf_path_change\fP(3), \fIf_path_change_at\fP(3), \fIf_path_current\fP(3), \fIf_path_directory_cleanup\fP(3), \fIf_path_is\fP(3), \fIf_path_is_absolute\fP(3), \fIf_path_is_relative\fP(3), \fIf_path_is_relative_current\fP(3), \fIf_path_real\fP(3), \fIrealpath()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_pipe/data/documentation/man/man3/f_pipe_error_exists.3 b/level_0/f_pipe/data/documentation/man/man3/f_pipe_error_exists.3
new file mode 100644 (file)
index 0000000..273212a
--- /dev/null
@@ -0,0 +1,31 @@
+.TH f_pipe_error_exists "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_pipe_error_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <pipe.h>
+.sp
+\fBf_status_t f_pipe_error_exists\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the standard error pipe source contains piped data.
+.PP
+F_file_stat (with error bit) on stat() error.
+.SH RETURN VALUE
+.PP
+F_true if there is piped data. F_false if there is no piped data.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpipe.h\fP(3), \fIf_pipe_error_exists\fP(3), \fIf_pipe_input_exists\fP(3), \fIf_pipe_output_exists\fP(3), \fIfstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_pipe/data/documentation/man/man3/f_pipe_input_exists.3 b/level_0/f_pipe/data/documentation/man/man3/f_pipe_input_exists.3
new file mode 100644 (file)
index 0000000..31700e1
--- /dev/null
@@ -0,0 +1,31 @@
+.TH f_pipe_input_exists "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_pipe_input_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <pipe.h>
+.sp
+\fBf_status_t f_pipe_input_exists\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the standard input pipe source contains piped data.
+.PP
+F_file_stat (with error bit) on stat() error.
+.SH RETURN VALUE
+.PP
+F_true if there is piped data. F_false if there is no piped data.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpipe.h\fP(3), \fIf_pipe_error_exists\fP(3), \fIf_pipe_input_exists\fP(3), \fIf_pipe_output_exists\fP(3), \fIfstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_pipe/data/documentation/man/man3/f_pipe_output_exists.3 b/level_0/f_pipe/data/documentation/man/man3/f_pipe_output_exists.3
new file mode 100644 (file)
index 0000000..d67a4b4
--- /dev/null
@@ -0,0 +1,33 @@
+.TH f_pipe_output_exists "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_pipe_output_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <pipe.h>
+.sp
+\fBf_status_t f_pipe_output_exists\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify whether or not the standard output pipe source contains piped data.
+.PP
+For most systems, standard output does not exist and instead maps to standard output.
+.PP
+F_file_stat (with error bit) on stat() error.
+.SH RETURN VALUE
+.PP
+F_false if there is no piped data. F_true if there is piped data.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpipe.h\fP(3), \fIf_pipe_error_exists\fP(3), \fIf_pipe_input_exists\fP(3), \fIf_pipe_output_exists\fP(3), \fIfstat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print.3 b/level_0/f_print/data/documentation/man/man3/f_print.3
new file mode 100644 (file)
index 0000000..1335749
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_character.3 b/level_0/f_print/data/documentation/man/man3/f_print_character.3
new file mode 100644 (file)
index 0000000..52d0441
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_print_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_character \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_character\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given a single 1-byte character, print the character.
+.PP
+This will print NULL characters and is essentially a "raw" print.
+.PP
+This does not call clearerr_unlocked().
+.PP
+F_output (with error bit) on failure (fwrite_unlocked() returns 0). F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_character_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_character_safely.3
new file mode 100644 (file)
index 0000000..8759dd6
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_print_character_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_character_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_character_safely\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given a single 1-byte character, print the character or a replacement if the character is not considered safe.
+.PP
+Control characters are converted to the Unicode control character symbols, including NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'. This can result in the 1-byte character being substituted with a 3-byte character when printing.
+.PP
+For UTF-8 characters, this cannot detect if the UTF-8 character is a control or anything else. This is, in genereal, not safe for printing UTF-8 characters given that a character is 1-byte.
+.PP
+This should only be called for the first 1-byte character of a multibyte character.
+.PP
+This does not call clearerr_unlocked().
+.PP
+F_output (with error bit) on failure (fwrite_unlocked() returns 0). F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL. F_utf on success, but character is a UTF-8 character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_character_safely_get.3 b/level_0/f_print/data/documentation/man/man3/f_print_character_safely_get.3
new file mode 100644 (file)
index 0000000..aafac88
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_print_character_safely_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_character_safely_get \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBconst f_string_static_t f_print_character_safely_get\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a safe representation of the character if the character is considered unsafe.
+.PP
+Control characters are converted to the Unicode control character symbols, including NULL. UTF-8 sequences with a width of 1 are converted to the unknown character '�'. For all other UTF-8 sequences (including non-control character ASCII symbols), an empty string is returned.
+.PP
+The returned string will either be an empty string (for characters that are already safe) or a string representing the replacement. This can result in a 3-byte character being returned as a string of 3 1-bytes.
+.PP
+This should only be called for the first 1-byte character of a multibyte character.
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.SH RETURN VALUE
+.PP
+A string with used length of 0 (an empty string) is returned if the character is already safe or is a UTF-8 character whose width is greater than 1. A string with a non-zero used length is returned if the character needs safe replacement. A string with a non-zero used length is returned are NULL terminated (after the used length).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic.3
new file mode 100644 (file)
index 0000000..0063833
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_print_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial.3
new file mode 100644 (file)
index 0000000..6fa2728
--- /dev/null
@@ -0,0 +1,117 @@
+.TH f_print_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_partial\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..d2916dd
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_print_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the specified range within the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..bf02c0e
--- /dev/null
@@ -0,0 +1,121 @@
+.TH f_print_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..6187685
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_print_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_raw.3
new file mode 100644 (file)
index 0000000..c688773
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_print_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the length of the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..9c10044
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_print_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_dynamic_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_dynamic_safely.3
new file mode 100644 (file)
index 0000000..8c5bae1
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_print_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_dynamic_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except.3 b/level_0/f_print/data/documentation/man/man3/f_print_except.3
new file mode 100644 (file)
index 0000000..2f96306
--- /dev/null
@@ -0,0 +1,105 @@
+.TH f_print_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+An offset is provided because the except position is expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic.3
new file mode 100644 (file)
index 0000000..9edf414
--- /dev/null
@@ -0,0 +1,118 @@
+.TH f_print_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial.3
new file mode 100644 (file)
index 0000000..6668fa5
--- /dev/null
@@ -0,0 +1,143 @@
+.TH f_print_except_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..21295ae
--- /dev/null
@@ -0,0 +1,145 @@
+.TH f_print_except_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..6dcafbb
--- /dev/null
@@ -0,0 +1,147 @@
+.TH f_print_except_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..2614d73
--- /dev/null
@@ -0,0 +1,145 @@
+.TH f_print_except_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_raw.3
new file mode 100644 (file)
index 0000000..72ed5a2
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_print_except_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..6642a46
--- /dev/null
@@ -0,0 +1,122 @@
+.TH f_print_except_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_dynamic_safely.3
new file mode 100644 (file)
index 0000000..89cb651
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_print_except_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in.3
new file mode 100644 (file)
index 0000000..3b88843
--- /dev/null
@@ -0,0 +1,129 @@
+.TH f_print_except_in "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic.3
new file mode 100644 (file)
index 0000000..52d2bff
--- /dev/null
@@ -0,0 +1,142 @@
+.TH f_print_except_in_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial.3
new file mode 100644 (file)
index 0000000..fb48843
--- /dev/null
@@ -0,0 +1,167 @@
+.TH f_print_except_in_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..1c17300
--- /dev/null
@@ -0,0 +1,169 @@
+.TH f_print_except_in_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..a49db0e
--- /dev/null
@@ -0,0 +1,169 @@
+.TH f_print_except_in_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..d019b2a
--- /dev/null
@@ -0,0 +1,167 @@
+.TH f_print_except_in_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_raw.3
new file mode 100644 (file)
index 0000000..cc783d3
--- /dev/null
@@ -0,0 +1,144 @@
+.TH f_print_except_in_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..d1afd15
--- /dev/null
@@ -0,0 +1,146 @@
+.TH f_print_except_in_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_dynamic_safely.3
new file mode 100644 (file)
index 0000000..3a7c1fe
--- /dev/null
@@ -0,0 +1,144 @@
+.TH f_print_except_in_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_raw.3
new file mode 100644 (file)
index 0000000..d7b8146
--- /dev/null
@@ -0,0 +1,131 @@
+.TH f_print_except_in_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_raw_safely.3
new file mode 100644 (file)
index 0000000..a853a93
--- /dev/null
@@ -0,0 +1,133 @@
+.TH f_print_except_in_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_in_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_in_safely.3
new file mode 100644 (file)
index 0000000..b457a87
--- /dev/null
@@ -0,0 +1,131 @@
+.TH f_print_except_in_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_in_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_in_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_raw.3
new file mode 100644 (file)
index 0000000..41929bb
--- /dev/null
@@ -0,0 +1,107 @@
+.TH f_print_except_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+An offset is provided because the except position is expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_raw_safely.3
new file mode 100644 (file)
index 0000000..f8bf360
--- /dev/null
@@ -0,0 +1,107 @@
+.TH f_print_except_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_except_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_except_safely.3
new file mode 100644 (file)
index 0000000..21c70b7
--- /dev/null
@@ -0,0 +1,105 @@
+.TH f_print_except_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_except_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_except_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_raw.3
new file mode 100644 (file)
index 0000000..3ad9093
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_print_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_raw\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to length 1-byte characters.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_raw_safely.3
new file mode 100644 (file)
index 0000000..2e0af82
--- /dev/null
@@ -0,0 +1,76 @@
+.TH f_print_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_raw_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_raw_terminated.3 b/level_0/f_print/data/documentation/man/man3/f_print_raw_terminated.3
new file mode 100644 (file)
index 0000000..bc0ef49
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_print_raw_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_raw_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_raw_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf.
+.PP
+Will stop at NULL. Will not print NULL.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_safely.3
new file mode 100644 (file)
index 0000000..e1a8c15
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_print_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_safely_get.3 b/level_0/f_print/data/documentation/man/man3/f_print_safely_get.3
new file mode 100644 (file)
index 0000000..a2b6360
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_print_safely_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_safely_get \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBconst f_string_static_t f_print_safely_get\fP(
+    \fBconst f_string_t          \fP\fIcharacter\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a safe representation of the character if the character is considered unsafe.
+.PP
+Control characters are converted to the Unicode control character symbols, including NULL. UTF-8 sequences with a width of 1 are converted to the unknown character '�'. For all other UTF-8 sequences, an empty string is returned.
+.PP
+The returned string will either be an empty string (for characters that are already safe) or a string representing the replacement. This can result in a 3-byte character being returned as a string of 3 1-bytes.
+.PP
+This should only be called for the first 1-byte character of a multibyte character.
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B width_max
+This is set to the max number of bytes available. This is then updated to represent the max bytes used if enough space is available.
+
+.SH RETURN VALUE
+.PP
+A string with used length of 0 (an empty string) is returned if the character is already safe or is a UTF-8 character whose width is greater than 1. A string with a non-zero used length is returned if the character needs safe replacement. A string with a non-zero used length is returned are NULL terminated (after the used length).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_safely_terminated.3 b/level_0/f_print/data/documentation/man/man3/f_print_safely_terminated.3
new file mode 100644 (file)
index 0000000..57a35d3
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_print_safely_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_safely_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_safely_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will stop at NULL. Will not print NULL (even as a control character symbol).
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_terminated.3 b/level_0/f_print/data/documentation/man/man3/f_print_terminated.3
new file mode 100644 (file)
index 0000000..eec6546
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_print_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t f_print_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf.
+.PP
+Will stop at NULL. Will not print NULL.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on failure. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIf_print\fP(3), \fIf_print_character\fP(3), \fIf_print_character_safely\fP(3), \fIf_print_character_safely_get\fP(3), \fIf_print_dynamic\fP(3), \fIf_print_dynamic_partial\fP(3), \fIf_print_dynamic_partial_raw\fP(3), \fIf_print_dynamic_partial_raw_safely\fP(3), \fIf_print_dynamic_partial_safely\fP(3), \fIf_print_dynamic_raw\fP(3), \fIf_print_dynamic_raw_safely\fP(3), \fIf_print_dynamic_safely\fP(3), \fIf_print_except\fP(3), \fIf_print_except_dynamic\fP(3), \fIf_print_except_dynamic_partial\fP(3), \fIf_print_except_dynamic_partial_raw\fP(3), \fIf_print_except_dynamic_partial_raw_safely\fP(3), \fIf_print_except_dynamic_partial_safely\fP(3), \fIf_print_except_dynamic_raw\fP(3), \fIf_print_except_dynamic_raw_safely\fP(3), \fIf_print_except_dynamic_safely\fP(3), \fIf_print_except_in\fP(3), \fIf_print_except_in_dynamic\fP(3), \fIf_print_except_in_dynamic_partial\fP(3), \fIf_print_except_in_dynamic_partial_raw\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely\fP(3), \fIf_print_except_in_dynamic_raw\fP(3), \fIf_print_except_in_dynamic_raw_safely\fP(3), \fIf_print_except_in_dynamic_safely\fP(3), \fIf_print_except_in_raw\fP(3), \fIf_print_except_in_raw_safely\fP(3), \fIf_print_except_in_safely\fP(3), \fIf_print_except_raw\fP(3), \fIf_print_except_raw_safely\fP(3), \fIf_print_except_safely\fP(3), \fIf_print_raw\fP(3), \fIf_print_raw_safely\fP(3), \fIf_print_raw_terminated\fP(3), \fIf_print_safely\fP(3), \fIf_print_safely_get\fP(3), \fIf_print_safely_terminated\fP(3), \fIf_print_terminated\fP(3), \fIclearerr_unlocked()\fP, \fIferror_unlocked()\fP, \fIfwrite_unlocked()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to.3 b/level_0/f_print/data/documentation/man/man3/f_print_to.3
new file mode 100644 (file)
index 0000000..1b9eb3f
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_print_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_character.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_character.3
new file mode 100644 (file)
index 0000000..9be61d7
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_print_to_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_character \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_character\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given a single 1-byte character, print the character.
+.PP
+This will print NULL characters and is essentially a "raw" print.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_character_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_character_safely.3
new file mode 100644 (file)
index 0000000..4072eb3
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_print_to_character_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_character_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_character_safely\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBconst f_file_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Given a single 1-byte character, print the character or a replacement if the character is not considered safe.
+.PP
+Control characters are converted to the Unicode control character symbols, including NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'. This can result in the 1-byte character being substituted with a 3-byte character when printing.
+.PP
+This should only be called for the first 1-byte character of a multibyte character.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic.3
new file mode 100644 (file)
index 0000000..7e05092
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_print_to_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the length of the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial.3
new file mode 100644 (file)
index 0000000..7e257b2
--- /dev/null
@@ -0,0 +1,117 @@
+.TH f_print_to_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_partial\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the specified range within the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..28210ca
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_print_to_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the specified range within the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..4ec7365
--- /dev/null
@@ -0,0 +1,123 @@
+.TH f_print_to_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..f102c35
--- /dev/null
@@ -0,0 +1,119 @@
+.TH f_print_to_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range in a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the specified range within the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_raw.3
new file mode 100644 (file)
index 0000000..d5fd53c
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_print_to_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the length of the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to. F_file_descriptor_not if file.id is -1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..2dba21c
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_print_to_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_dynamic_safely.3
new file mode 100644 (file)
index 0000000..c52acb0
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_print_to_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_dynamic_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this prints a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to the length of the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except.3
new file mode 100644 (file)
index 0000000..ba53cea
--- /dev/null
@@ -0,0 +1,103 @@
+.TH f_print_to_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic.3
new file mode 100644 (file)
index 0000000..462650f
--- /dev/null
@@ -0,0 +1,118 @@
+.TH f_print_to_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial.3
new file mode 100644 (file)
index 0000000..535f640
--- /dev/null
@@ -0,0 +1,143 @@
+.TH f_print_to_except_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..126296a
--- /dev/null
@@ -0,0 +1,145 @@
+.TH f_print_to_except_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..ea42631
--- /dev/null
@@ -0,0 +1,149 @@
+.TH f_print_to_except_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..23892c0
--- /dev/null
@@ -0,0 +1,145 @@
+.TH f_print_to_except_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range in a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the specified range within the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_raw.3
new file mode 100644 (file)
index 0000000..5165504
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_print_to_except_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..7e028f6
--- /dev/null
@@ -0,0 +1,124 @@
+.TH f_print_to_except_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_dynamic_safely.3
new file mode 100644 (file)
index 0000000..1027e86
--- /dev/null
@@ -0,0 +1,120 @@
+.TH f_print_to_except_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this prints a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to the length of the buffer.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in.3
new file mode 100644 (file)
index 0000000..42aabcb
--- /dev/null
@@ -0,0 +1,131 @@
+.TH f_print_to_except_in "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic.3
new file mode 100644 (file)
index 0000000..0a7e17a
--- /dev/null
@@ -0,0 +1,144 @@
+.TH f_print_to_except_in_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial.3
new file mode 100644 (file)
index 0000000..526ef32
--- /dev/null
@@ -0,0 +1,169 @@
+.TH f_print_to_except_in_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..478e321
--- /dev/null
@@ -0,0 +1,171 @@
+.TH f_print_to_except_in_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..96f5181
--- /dev/null
@@ -0,0 +1,171 @@
+.TH f_print_to_except_in_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..0414e5d
--- /dev/null
@@ -0,0 +1,169 @@
+.TH f_print_to_except_in_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range in a given dynamic string.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the specified range within the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_raw.3
new file mode 100644 (file)
index 0000000..0e50e3c
--- /dev/null
@@ -0,0 +1,146 @@
+.TH f_print_to_except_in_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..7872a78
--- /dev/null
@@ -0,0 +1,148 @@
+.TH f_print_to_except_in_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_dynamic_safely.3
new file mode 100644 (file)
index 0000000..7799b3e
--- /dev/null
@@ -0,0 +1,146 @@
+.TH f_print_to_except_in_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this prints a given dynamic string.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to the length of the buffer.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_raw.3
new file mode 100644 (file)
index 0000000..9aa6b94
--- /dev/null
@@ -0,0 +1,133 @@
+.TH f_print_to_except_in_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_raw_safely.3
new file mode 100644 (file)
index 0000000..1c6a25e
--- /dev/null
@@ -0,0 +1,135 @@
+.TH f_print_to_except_in_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_in_safely.3
new file mode 100644 (file)
index 0000000..b14aebc
--- /dev/null
@@ -0,0 +1,133 @@
+.TH f_print_to_except_in_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_in_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_in_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+An offset is provided because the except_at/except_in positions are expected to be relative to the start position, without the offset applied.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_raw.3
new file mode 100644 (file)
index 0000000..71e88f5
--- /dev/null
@@ -0,0 +1,105 @@
+.TH f_print_to_except_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_raw_safely.3
new file mode 100644 (file)
index 0000000..e8fee7c
--- /dev/null
@@ -0,0 +1,109 @@
+.TH f_print_to_except_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_except_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_except_safely.3
new file mode 100644 (file)
index 0000000..0ad2b52
--- /dev/null
@@ -0,0 +1,105 @@
+.TH f_print_to_except_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_except_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_except_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print up to length 1-byte characters.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_raw.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_raw.3
new file mode 100644 (file)
index 0000000..820b795
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_print_to_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_raw\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to length 1-byte characters.
+.PP
+All UTF-8 characters, invalid or not, are printed as is.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_raw_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_raw_safely.3
new file mode 100644 (file)
index 0000000..c0d4a57
--- /dev/null
@@ -0,0 +1,78 @@
+.TH f_print_to_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_raw_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf, except that this will only print a specific range.
+.PP
+This is essentually a "safe" print that also prints NULL.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL. Will print up to length 1-byte characters.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_raw_terminated.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_raw_terminated.3
new file mode 100644 (file)
index 0000000..6daa5fe
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_print_to_raw_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_raw_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_raw_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf.
+.PP
+Will stop at NULL. Will not print NULL.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_safely.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_safely.3
new file mode 100644 (file)
index 0000000..3e470f1
--- /dev/null
@@ -0,0 +1,74 @@
+.TH f_print_to_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library dprintf, except that this will only print a specific range.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print up to length 1-byte characters.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_safely_terminated.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_safely_terminated.3
new file mode 100644 (file)
index 0000000..2c9512d
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_print_to_safely_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_safely_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_safely_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will stop at NULL. Will not print NULL (even as a control character symbol).
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP, \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_print/data/documentation/man/man3/f_print_to_terminated.3 b/level_0/f_print/data/documentation/man/man3/f_print_to_terminated.3
new file mode 100644 (file)
index 0000000..cf7ec19
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_print_to_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_print_to_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <to.h>
+.sp
+\fBf_status_t f_print_to_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Similar to a c-library printf.
+.PP
+Will stop at NULL. Will not print NULL.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_file_system_quota_block (with error bit) if quota is reached or exceeded. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_number_overflow (with error bit) if maximum size reached while writing or attempting to write beyond maximum allowed offset. F_parameter (with error bit) if a parameter is invalid. F_pipe (with error bit) if a connected pipe or socket is closed. F_space_not (with error bit) cannot write, out of space. F_socket_not (with error bit) if socket is not connected.
+.PP
+F_output (with error bit) on any other failure.
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing the file descriptor to output to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if there is nothing to print. F_file_descriptor_not if file.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIto.h\fP(3), \fIf_print_to\fP(3), \fIf_print_to_character\fP(3), \fIf_print_to_character_safely\fP(3), \fIf_print_to_dynamic\fP(3), \fIf_print_to_dynamic_partial\fP(3), \fIf_print_to_dynamic_partial_raw\fP(3), \fIf_print_to_dynamic_partial_raw_safely\fP(3), \fIf_print_to_dynamic_partial_safely\fP(3), \fIf_print_to_dynamic_raw\fP(3), \fIf_print_to_dynamic_raw_safely\fP(3), \fIf_print_to_dynamic_safely\fP(3), \fIf_print_to_except\fP(3), \fIf_print_to_except_dynamic\fP(3), \fIf_print_to_except_dynamic_partial\fP(3), \fIf_print_to_except_dynamic_partial_raw\fP(3), \fIf_print_to_except_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_dynamic_partial_safely\fP(3), \fIf_print_to_except_dynamic_raw\fP(3), \fIf_print_to_except_dynamic_raw_safely\fP(3), \fIf_print_to_except_dynamic_safely\fP(3), \fIf_print_to_except_in\fP(3), \fIf_print_to_except_in_dynamic\fP(3), \fIf_print_to_except_in_dynamic_partial\fP(3), \fIf_print_to_except_in_dynamic_partial_raw\fP(3), \fIf_print_to_except_in_dynamic_partial_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_partial_safely\fP(3), \fIf_print_to_except_in_dynamic_raw\fP(3), \fIf_print_to_except_in_dynamic_raw_safely\fP(3), \fIf_print_to_except_in_dynamic_safely\fP(3), \fIf_print_to_except_in_raw\fP(3), \fIf_print_to_except_in_raw_safely\fP(3), \fIf_print_to_except_in_safely\fP(3), \fIf_print_to_except_raw\fP(3), \fIf_print_to_except_raw_safely\fP(3), \fIf_print_to_except_safely\fP(3), \fIf_print_to_raw\fP(3), \fIf_print_to_raw_safely\fP(3), \fIf_print_to_raw_terminated\fP(3), \fIf_print_to_safely\fP(3), \fIf_print_to_safely_terminated\fP(3), \fIf_print_to_terminated\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_process/data/documentation/man/man3/f_process_descriptor_clone.3 b/level_0/f_process/data/documentation/man/man3/f_process_descriptor_clone.3
new file mode 100644 (file)
index 0000000..8025517
--- /dev/null
@@ -0,0 +1,55 @@
+.TH f_process_descriptor_clone "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_process_descriptor_clone \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBf_status_t f_process_descriptor_clone\fP(
+    \fBconst pid_t        \fP\fIpid\fP,
+    \fBconst int          \fP\fIclone\fP,
+    \fBconst unsigned int \fP\fIflags\fP,
+    \fBint *const         \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Clone a file descriptor from some process.
+.PP
+Must not be NULL.
+.PP
+F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_open_max (with error bit) when system-wide max open files is reached. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the current process is not allowed to clone the requested file descriptor. F_search (with error bit) if the process could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B pid
+The process ID to get the descriptor of.
+
+.TP
+.B clone
+The process file descriptor to clone.
+
+.TP
+.B flags
+Flags to use.
+
+.TP
+.B id
+The file descriptor. A value of -1 designates that this is not set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIf_process_descriptor_clone\fP(3), \fIf_process_descriptor_open\fP(3), \fIf_process_descriptor_signal\fP(3), \fIf_process_handle_from_path_at\fP(3), \fIf_process_handle_open_at\fP(3), \fIpidfd_getfd()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_process/data/documentation/man/man3/f_process_descriptor_open.3 b/level_0/f_process/data/documentation/man/man3/f_process_descriptor_open.3
new file mode 100644 (file)
index 0000000..63855b3
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_process_descriptor_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_process_descriptor_open \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBf_status_t f_process_descriptor_open\fP(
+    \fBconst pid_t        \fP\fIpid\fP,
+    \fBconst unsigned int \fP\fIflags\fP,
+    \fBint *const         \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a file descriptor of some process.
+.PP
+Must not be NULL.
+.PP
+F_device_not (with error bit) if the device does not exist. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) when system-wide max open files is reached. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_search (with error bit) if the process could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B pid
+The process ID to get the descriptor of.
+
+.TP
+.B flags
+Flags to use when opening (see f_process_open_flag_*_d).
+
+.TP
+.B id
+The file descriptor. A value of -1 designates that this is not set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIf_process_descriptor_clone\fP(3), \fIf_process_descriptor_open\fP(3), \fIf_process_descriptor_signal\fP(3), \fIf_process_handle_from_path_at\fP(3), \fIf_process_handle_open_at\fP(3), \fIpidfd_open()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_process/data/documentation/man/man3/f_process_descriptor_signal.3 b/level_0/f_process/data/documentation/man/man3/f_process_descriptor_signal.3
new file mode 100644 (file)
index 0000000..56b72c3
--- /dev/null
@@ -0,0 +1,53 @@
+.TH f_process_descriptor_signal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_process_descriptor_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBf_status_t f_process_descriptor_signal\fP(
+    \fBconst int          \fP\fIid\fP,
+    \fBconst int          \fP\fIsignal\fP,
+    \fBconst unsigned int \fP\fIflags\fP,
+    \fBsiginfo_t *const   \fP\fIinformation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send a signal to a process file descriptor.
+.PP
+F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the current process is not allowed to signal the requested file descriptor. F_search (with error bit) if the process could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process file descriptor to send the signal to.
+
+.TP
+.B signal
+The signal to send.
+
+.TP
+.B flags
+Flags to use.
+
+.TP
+.B information
+(optional) The signal information.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIf_process_descriptor_clone\fP(3), \fIf_process_descriptor_open\fP(3), \fIf_process_descriptor_signal\fP(3), \fIf_process_handle_from_path_at\fP(3), \fIf_process_handle_open_at\fP(3), \fIpidfd_send_signal()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_process/data/documentation/man/man3/f_process_handle_from_path_at.3 b/level_0/f_process/data/documentation/man/man3/f_process_handle_from_path_at.3
new file mode 100644 (file)
index 0000000..8a0fa81
--- /dev/null
@@ -0,0 +1,86 @@
+.TH f_process_handle_from_path_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_process_handle_from_path_at \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBf_status_t f_process_handle_from_path_at\fP(
+    \fBconst int               \fP\fIat_id\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst int               \fP\fIflags\fP,
+    \fBf_handle_t *const       \fP\fIhandle\fP,
+    \fBint *const              \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a file handle and mount ID from some file path.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_found_not (with error bit) if directory was not found. F_directory_not (with error bit) file is not a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_open_max (with error bit) too many open files. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) if the file system does not suppot converting a path to a file handle.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B at_id
+The parent directory, as an open directory file descriptor, in which path is relative to.
+
+.TP
+.B path
+The file path to the file or directory.
+
+.TP
+.B flags
+Flags to use.
+
+.TP
+.B handle
+The retrieved file handle data.
+
+.TP
+.B id
+The retrieved mount ID.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIf_process_descriptor_clone\fP(3), \fIf_process_descriptor_open\fP(3), \fIf_process_descriptor_signal\fP(3), \fIf_process_handle_from_path_at\fP(3), \fIf_process_handle_open_at\fP(3), \fIname_to_handle_at()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_process/data/documentation/man/man3/f_process_handle_open_at.3 b/level_0/f_process/data/documentation/man/man3/f_process_handle_open_at.3
new file mode 100644 (file)
index 0000000..dde2644
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_process_handle_open_at "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_process_handle_open_at \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBf_status_t f_process_handle_open_at\fP(
+    \fBconst int          \fP\fIat_id\fP,
+    \fBconst unsigned int \fP\fIflags\fP,
+    \fBf_handle_t *const  \fP\fIhandle\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a file represented by the given handle.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_directory_found_not (with error bit) if directory was not found. F_directory_not (with error bit) file is not a directory. F_directory_descriptor_not (with error bit) for bad directory descriptor for at_id. F_file_open_max (with error bit) too many open files. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B at_id
+The mount directory, as an open directory file descriptor, in which path is relative to. Such as from f_process_handle_from_path_at().
+
+.TP
+.B flags
+Flags to use.
+
+.TP
+.B handle
+The file handle data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIf_process_descriptor_clone\fP(3), \fIf_process_descriptor_open\fP(3), \fIf_process_descriptor_signal\fP(3), \fIf_process_handle_from_path_at\fP(3), \fIf_process_handle_open_at\fP(3), \fIopen_by_handle_at()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_random/data/documentation/man/man3/f_random_array_shuffle.3 b/level_0/f_random/data/documentation/man/man3/f_random_array_shuffle.3
new file mode 100644 (file)
index 0000000..6b88c70
--- /dev/null
@@ -0,0 +1,68 @@
+.TH f_random_array_shuffle "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_random_array_shuffle \-
+.SH SYNOPSIS
+.nf
+.B #include <random.h>
+.sp
+\fBf_status_t f_random_array_shuffle\fP(
+    \fBconst unsigned int        \fP\fIflag\fP,
+    \fBconst f_number_unsigned_t \fP\fItotal\fP,
+    \fBconst unsigned short      \fP\fIsize\fP,
+    \fBf_string_dynamic_t *const \fP\fIcache\fP,
+    \fBvoid *const               \fP\fIindexes\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Re-organize an array in a random order by swapping the values.
+.PP
+The standard behavior of this is to call getrandom().
+.PP
+The behavior of this function might also be replaced with calls to other libraries that are highly security specialized. If this is done, the meaning behind the flags passed should not be changed.
+.PP
+This calls the Linux-specific getrandom() by default. If this is not available or pure POSIX is desired, then the implementation must handle accessing the /dev/random and /dev/urandom themselves (or something equivalent).
+.PP
+This must only be the address to a standard array structure, such as those represented by the syntax "[]".
+.PP
+Must not be NULL.
+.PP
+F_again (with error bit) when in non-blocking mode but reading entropy source would block (such as when the entropy source is busy). F_buffer (with error bit) if the address represented by the buffer is outside accessible address space. F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the running kernel does not support the getrandom() call. F_too_small (with error bit) if size is too small.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B flag
+The flags to be passed to getrandom().
+
+.TP
+.B total
+The total number of index positions to randomize.
+
+.TP
+.B size
+The type size of the array represented in indexes.
+
+.TP
+.B cache
+A string used when allocating space when calling the getrandom() or similar. This changes the length of the cache array as needed.
+
+.TP
+.B indexes
+The array in which the index positions that must be cast to a (void *). The index positions are determined by size parameter. The first memory address given represents index 0. The values at each index position are swapped.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but total is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrandom.h\fP(3), \fIf_random_array_shuffle\fP(3), \fIf_random_get\fP(3), \fIf_random_read\fP(3), \fIf_random_seed\fP(3), \fIf_random_seed_set\fP(3), \fIf_memory_array_increase_by()\fP, \fIgetrandom()\fP, \fImemmove()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_random/data/documentation/man/man3/f_random_get.3 b/level_0/f_random/data/documentation/man/man3/f_random_get.3
new file mode 100644 (file)
index 0000000..a0bfe01
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_random_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_random_get \-
+.SH SYNOPSIS
+.nf
+.B #include <random.h>
+.sp
+\fBf_status_t f_random_get\fP(
+    \fBlong *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the destination string by reading from the random or urandom entropy source directly.
+.PP
+The standard behavior of this is to call random().
+.PP
+The random seed should be set by either calling f_random_seed(), f_random_seed_set(), or directly calling random(). Calling f_random_seed() or f_random_seed_set() to set the seed is generally safer from a library implementation perspective for situations where the implementation of f_random_seed() or f_random_seed_set() and therefore f_random() is changed from the standard behavior.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B destination
+The destination long to write to.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrandom.h\fP(3), \fIf_random_array_shuffle\fP(3), \fIf_random_get\fP(3), \fIf_random_read\fP(3), \fIf_random_seed\fP(3), \fIf_random_seed_set\fP(3), \fIf_random_seed()\fP, \fIf_random_seed_set()\fP, \fIf_random_seed()\fP, \fIf_random_seed_set()\fP, \fIf_random_seed()\fP, \fIf_random_seed_set()\fP, \fIrandom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_random/data/documentation/man/man3/f_random_read.3 b/level_0/f_random/data/documentation/man/man3/f_random_read.3
new file mode 100644 (file)
index 0000000..f3a61e8
--- /dev/null
@@ -0,0 +1,59 @@
+.TH f_random_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_random_read \-
+.SH SYNOPSIS
+.nf
+.B #include <random.h>
+.sp
+\fBf_status_t f_random_read\fP(
+    \fBconst unsigned int        \fP\fIflag\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_t *const         \fP\fIdestination\fP,
+    \fBssize_t *const            \fP\fItotal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the destination string by reading from the random or urandom entropy source directly.
+.PP
+The standard behavior of this is to call getrandom().
+.PP
+The behavior of this function might also be replaced with calls to other libraries that are highly security specialized. If this is done, the meaning behind the flags passed should not be changed.
+.PP
+This calls the Linux-specific getrandom() by default. If this is not available or pure POSIX is desired, then the implementation must handle accessing the /dev/random and /dev/urandom themselves (or something equivalent).
+.PP
+Set to NULL to not use.
+.PP
+F_again (with error bit) when in non-blocking mode but reading entropy source would block (such as when the entropy source is busy). F_buffer (with error bit) if the address represented by the buffer is outside accessible address space. F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the running kernel does not support the getrandom() call.
+.SH PARAMETERS
+.TP
+.B flag
+The flags to be passed to getrandom().
+
+.TP
+.B length
+The size within the destination string to copy. The standard max size is 255. This length must not exceed the size allocated in destination or buffer overrun or other security problems may occur.
+
+.TP
+.B destination
+The destination string to write to. The size of this is not dynamically allocated. The caller must assure that the size allocated is not smaller than the size specified in the length parameter.
+
+.TP
+.B total
+(optional) The total number of bytes actually read. This value is not changed on error.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrandom.h\fP(3), \fIf_random_array_shuffle\fP(3), \fIf_random_get\fP(3), \fIf_random_read\fP(3), \fIf_random_seed\fP(3), \fIf_random_seed_set\fP(3), \fIgetrandom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_random/data/documentation/man/man3/f_random_seed.3 b/level_0/f_random/data/documentation/man/man3/f_random_seed.3
new file mode 100644 (file)
index 0000000..c34e134
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_random_seed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_random_seed \-
+.SH SYNOPSIS
+.nf
+.B #include <random.h>
+.sp
+\fBf_status_t f_random_seed\fP(
+    \fBconst unsigned int \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the random seed from random entropy, generally for the standard POSIX random() use cases.
+.PP
+The standard behavior of this is to call getrandom().
+.PP
+The behavior of this function might also be replaced with calls to other libraries that are highly security specialized. If this is done, the meaning behind the flags passed should not be changed.
+.PP
+This calls the Linux-specific getrandom() by default. If this is not available or pure POSIX is desired, then the implementation must handle accessing the /dev/random and /dev/urandom themselves (or something equivalent).
+.PP
+F_random_seed_flag_source_d: Random data is taken from the random source, such as /dev/random and not the urandom source.
+.PP
+F_again (with error bit) when in non-blocking mode but reading entropy source would block (such as when the entropy source is busy). F_buffer (with error bit) if the address represented by the buffer is outside accessible address space. F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the running kernel does not support the getrandom() call.
+.SH PARAMETERS
+.TP
+.B flag
+The flags to be passed to getrandom().
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrandom.h\fP(3), \fIf_random_array_shuffle\fP(3), \fIf_random_get\fP(3), \fIf_random_read\fP(3), \fIf_random_seed\fP(3), \fIf_random_seed_set\fP(3), \fIgetrandom()\fP, \fIsrandom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_random/data/documentation/man/man3/f_random_seed_set.3 b/level_0/f_random/data/documentation/man/man3/f_random_seed_set.3
new file mode 100644 (file)
index 0000000..429fde1
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_random_seed_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_random_seed_set \-
+.SH SYNOPSIS
+.nf
+.B #include <random.h>
+.sp
+\fBf_status_t f_random_seed_set\fP(
+    \fBunsigned int \fP\fIseed\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the random seed manually using the given seed value, generally for the standard POSIX random() use cases.
+.PP
+The standard behavior of this is to call srandom().
+.PP
+The behavior of this function might also be replaced with calls to other libraries that are highly security specialized.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B seed
+The seed value to assign.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrandom.h\fP(3), \fIf_random_array_shuffle\fP(3), \fIf_random_get\fP(3), \fIf_random_read\fP(3), \fIf_random_seed\fP(3), \fIf_random_seed_set\fP(3), \fIsrandom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip.3 b/level_0/f_rip/data/documentation/man/man3/f_rip.3
new file mode 100644 (file)
index 0000000..b040630
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_rip "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip \-
+.SH SYNOPSIS
+.nf
+.B #include <rip.h>
+.sp
+\fBf_status_t f_rip\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new string from the provided range in the string.
+.PP
+Ignores leading and trailing whitespace. Ignores leading and trailing NULL characters. As a result, resulting size may be smaller than requested length.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_string_append_nulless().
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_data_not if the range to rip is empty. F_data_not_eos if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrip.h\fP(3), \fIf_rip\fP(3), \fIf_rip_dynamic\fP(3), \fIf_rip_dynamic_nulless\fP(3), \fIf_rip_dynamic_partial\fP(3), \fIf_rip_dynamic_partial_nulless\fP(3), \fIf_rip_nulless\fP(3), \fIf_string_append_nulless()\fP, \fIf_string_append()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_string_append()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic.3
new file mode 100644 (file)
index 0000000..55343ea
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_rip_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <rip.h>
+.sp
+\fBf_status_t f_rip_dynamic\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new string from the provided range in the buffer.
+.PP
+Ignores leading and trailing whitespace. Ignores leading and trailing NULL characters. As a result, resulting size may be smaller than requested range.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_string_append().
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B source
+The buffer to rip from.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrip.h\fP(3), \fIf_rip\fP(3), \fIf_rip_dynamic\fP(3), \fIf_rip_dynamic_nulless\fP(3), \fIf_rip_dynamic_partial\fP(3), \fIf_rip_dynamic_partial_nulless\fP(3), \fIf_rip_nulless\fP(3), \fIf_string_append()\fP, \fIf_string_append()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_string_append()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_nulless.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_nulless.3
new file mode 100644 (file)
index 0000000..2a2a47b
--- /dev/null
@@ -0,0 +1,75 @@
+.TH f_rip_dynamic_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_dynamic_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <rip.h>
+.sp
+\fBf_status_t f_rip_dynamic_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new string from the provided range in the buffer.
+.PP
+Ignores leading and trailing whitespace. Ignores leading and trailing NULL characters. As a result, resulting size may be smaller than requested range.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_string_append_nulless().
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrip.h\fP(3), \fIf_rip\fP(3), \fIf_rip_dynamic\fP(3), \fIf_rip_dynamic_nulless\fP(3), \fIf_rip_dynamic_partial\fP(3), \fIf_rip_dynamic_partial_nulless\fP(3), \fIf_rip_nulless\fP(3), \fIf_string_append_nulless()\fP, \fIf_string_append_nulless()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_string_append_nulless()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_partial.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_partial.3
new file mode 100644 (file)
index 0000000..8f1f434
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_rip_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <rip.h>
+.sp
+\fBf_status_t f_rip_dynamic_partial\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new string from the provided range in the buffer.
+.PP
+Ignores leading and trailing whitespace. Ignores leading and trailing NULL characters. As a result, resulting size may be smaller than requested range.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_string_append().
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B source
+The buffer to rip from.
+
+.TP
+.B range
+A range within the buffer representing the string to rip.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrip.h\fP(3), \fIf_rip\fP(3), \fIf_rip_dynamic\fP(3), \fIf_rip_dynamic_nulless\fP(3), \fIf_rip_dynamic_partial\fP(3), \fIf_rip_dynamic_partial_nulless\fP(3), \fIf_rip_nulless\fP(3), \fIf_string_append()\fP, \fIf_string_append()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_string_append()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_partial_nulless.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_dynamic_partial_nulless.3
new file mode 100644 (file)
index 0000000..e9070b5
--- /dev/null
@@ -0,0 +1,100 @@
+.TH f_rip_dynamic_partial_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_dynamic_partial_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <rip.h>
+.sp
+\fBf_status_t f_rip_dynamic_partial_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new string from the provided range in the buffer.
+.PP
+Ignores leading and trailing whitespace. Ignores leading and trailing NULL characters. As a result, resulting size may be smaller than requested range.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_string_append_nulless().
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B range
+A range within the buffer representing the string to rip.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrip.h\fP(3), \fIf_rip\fP(3), \fIf_rip_dynamic\fP(3), \fIf_rip_dynamic_nulless\fP(3), \fIf_rip_dynamic_partial\fP(3), \fIf_rip_dynamic_partial_nulless\fP(3), \fIf_rip_nulless\fP(3), \fIf_string_append_nulless()\fP, \fIf_string_append_nulless()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_string_append_nulless()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_nulless.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_nulless.3
new file mode 100644 (file)
index 0000000..357dc2b
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_rip_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <rip.h>
+.sp
+\fBf_status_t f_rip_nulless\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new string from the provided range in the string.
+.PP
+Ignores leading and trailing whitespace. Ignores leading and trailing NULL characters. As a result, resulting size may be smaller than requested length.
+.PP
+Skips over NULL characters from source when ripping.
+.PP
+Success from: f_string_append_nulless().
+.PP
+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().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_data_not if the range to rip is empty. F_data_not_eos if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIrip.h\fP(3), \fIf_rip\fP(3), \fIf_rip_dynamic\fP(3), \fIf_rip_dynamic_nulless\fP(3), \fIf_rip_dynamic_partial\fP(3), \fIf_rip_dynamic_partial_nulless\fP(3), \fIf_rip_nulless\fP(3), \fIf_string_append_nulless()\fP, \fIf_string_append_nulless()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIf_string_append_nulless()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_utf.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_utf.3
new file mode 100644 (file)
index 0000000..e490dc1
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_rip_utf "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_utf \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_rip_utf\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new UTF-8 string from the provided range in the string.
+.PP
+Ignores leading and trailing whitespace. As a result, resulting size may be smaller than requested length.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_rip_utf\fP(3), \fIf_rip_utf_dynamic\fP(3), \fIf_rip_utf_dynamic_nulless\fP(3), \fIf_rip_utf_nulless\fP(3), \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_utf_dynamic.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_utf_dynamic.3
new file mode 100644 (file)
index 0000000..5a1483b
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_rip_utf_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_utf_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_rip_utf_dynamic\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new UTF-8 string from the provided range in the buffer.
+.PP
+Ignores leading and trailing whitespace. As a result, resulting size may be smaller than requested range.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_string_append().
+.SH PARAMETERS
+.TP
+.B source
+The buffer to rip from.
+
+.TP
+.B range
+A range within the buffer representing the string to rip.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_rip_utf\fP(3), \fIf_rip_utf_dynamic\fP(3), \fIf_rip_utf_dynamic_nulless\fP(3), \fIf_rip_utf_nulless\fP(3), \fIf_utf_string_append()\fP, \fIf_utf_string_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_utf_dynamic_nulless.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_utf_dynamic_nulless.3
new file mode 100644 (file)
index 0000000..0aceab3
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_rip_utf_dynamic_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_utf_dynamic_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_rip_utf_dynamic_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new UTF-8 string from the provided range in the buffer.
+.PP
+Ignores leading and trailing whitespace. As a result, resulting size may be smaller than requested range.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_utf_string_append_nulless().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B range
+A range within the buffer representing the string to rip.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_rip_utf\fP(3), \fIf_rip_utf_dynamic\fP(3), \fIf_rip_utf_dynamic_nulless\fP(3), \fIf_rip_utf_nulless\fP(3), \fIf_utf_string_append_nulless()\fP, \fIf_utf_string_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_rip/data/documentation/man/man3/f_rip_utf_nulless.3 b/level_0/f_rip/data/documentation/man/man3/f_rip_utf_nulless.3
new file mode 100644 (file)
index 0000000..52bb8af
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_rip_utf_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_rip_utf_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_rip_utf_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate a new UTF-8 string from the provided range in the string.
+.PP
+Ignores leading and trailing whitespace. As a result, resulting size may be smaller than requested length.
+.PP
+Skips over NULL characters from source when ripping.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_utf_character_is_whitespace().
+.SH PARAMETERS
+.TP
+.B source
+The string to rip from.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_rip_utf\fP(3), \fIf_rip_utf_dynamic\fP(3), \fIf_rip_utf_dynamic_nulless\fP(3), \fIf_rip_utf_nulless\fP(3), \fIf_utf_character_is_whitespace()\fP, \fIf_utf_character_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_affinity_get.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_affinity_get.3
new file mode 100644 (file)
index 0000000..50607c5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_schedule_affinity_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_affinity_get \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_affinity_get\fP(
+    \fBconst pid_t      \fP\fIid\fP,
+    \fBsize_t *const    \fP\fIsize\fP,
+    \fBcpu_set_t *const \fP\fIaffinity\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the processor affinity.
+.PP
+This must be set to the expected affinity set size. If this value is too low, then F_parameter (with error bit) may be returned.
+.PP
+On success, the size is modified with the retrieved size of the affinity set.
+.PP
+Must not be NULL.
+.PP
+F_buffer (with error bit) if unable to populate the affinity set. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID.
+
+.TP
+.B size
+The size of the affinity set in bytes.
+
+.TP
+.B affinity
+The retrieved affinity set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_getaffinity()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_affinity_set.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_affinity_set.3
new file mode 100644 (file)
index 0000000..c318248
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_schedule_affinity_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_affinity_set \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_affinity_set\fP(
+    \fBconst pid_t     \fP\fIid\fP,
+    \fBconst size_t    \fP\fIsize\fP,
+    \fBconst cpu_set_t \fP\fIaffinity\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the processor affinity.
+.PP
+F_buffer (with error bit) if unable to populate the affinity set. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID, process group ID, or user ID.
+
+.TP
+.B size
+The size of the affinity set in bytes.
+
+.TP
+.B affinity
+The affinity set to assign.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_setaffinity()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_attribute_get.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_attribute_get.3
new file mode 100644 (file)
index 0000000..ccef3c7
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_schedule_attribute_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_attribute_get \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_attribute_get\fP(
+    \fBconst pid_t                   \fP\fIid\fP,
+    \fBconst unsigned int            \fP\fIflags\fP,
+    \fBconst unsigned int            \fP\fIsize\fP,
+    \fBf_schedule_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the processor attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_search (with error bit) if ID could not be found. F_too_large (with error bit) if the size and attribute are too small.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID.
+
+.TP
+.B flags
+The flags beyond the standard f_schedule_attribute_*_d. This is pretty much always 0.
+
+.TP
+.B size
+The size of the attribute structure in bytes..
+
+.TP
+.B attribute
+The retrieved attribute set.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A typedef for representing a sched_att structure from <linux/sched/types.h>.
+.PP
+Note: "struct sched_attr" is an incomplete type on systems like glibc. The approach here is to entirely replace it and use syscalls.
+.PP
+__u32 sched_util_max
+.sp
+.RS
+.nf
+\fB
+struct f_schedule_attribute_t {
+  uint32_t \fIsize\fP;
+  uint32_t \fIsched_policy\fP;
+  uint64_t \fIsched_flags\fP;
+  int32_t  \fIsched_nice\fP;
+  uint32_t \fIsched_priority\fP;
+  uint64_t \fIsched_runtime\fP;
+  uint64_t \fIsched_deadline\fP;
+  uint64_t \fIsched_period\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_getattr()\fP, \fISYS_sched_getattr()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_attribute_set.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_attribute_set.3
new file mode 100644 (file)
index 0000000..fa157b2
--- /dev/null
@@ -0,0 +1,75 @@
+.TH f_schedule_attribute_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_attribute_set \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_attribute_set\fP(
+    \fBconst pid_t                  \fP\fIid\fP,
+    \fBconst unsigned int           \fP\fIflags\fP,
+    \fBconst f_schedule_attribute_t \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the processor attribute.
+.PP
+F_busy (with error bit) if scheduler is too busy to perform operation. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found. F_support_not (with error bit) if the system does not support this operation for the current scheduler policy. F_too_large (with error bit) if the size and attribute are too small.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID, process group ID, or user ID.
+
+.TP
+.B flags
+The flags beyond the standard f_schedule_attribute_*_d. This is pretty much always 0.
+
+.TP
+.B attribute
+The attribute set to assign.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A typedef for representing a sched_att structure from <linux/sched/types.h>.
+.PP
+Note: "struct sched_attr" is an incomplete type on systems like glibc. The approach here is to entirely replace it and use syscalls.
+.PP
+__u32 sched_util_max
+.sp
+.RS
+.nf
+\fB
+struct f_schedule_attribute_t {
+  uint32_t \fIsize\fP;
+  uint32_t \fIsched_policy\fP;
+  uint64_t \fIsched_flags\fP;
+  int32_t  \fIsched_nice\fP;
+  uint32_t \fIsched_priority\fP;
+  uint64_t \fIsched_runtime\fP;
+  uint64_t \fIsched_deadline\fP;
+  uint64_t \fIsched_period\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_setattr()\fP, \fISYS_sched_setattr()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_nice.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_nice.3
new file mode 100644 (file)
index 0000000..0ba67ff
--- /dev/null
@@ -0,0 +1,46 @@
+.TH f_schedule_nice "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_nice \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_nice\fP(
+    \fBconst int \fP\fIniceness\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the niceness of the current process.
+.PP
+The niceness affects the priority of the process for processor scheduling purposes.
+.PP
+The RLIMIT_NICE limitation restricts how much a process can lower its niceness and therefore raise its priority.
+.PP
+A lower value means that the process generally gets more CPU time.
+.PP
+The max value is 19 and the lowest value is -20.
+.PP
+F_too_large (with error bit) if the niceness value is too large (greater than 19). F_too_small (with error bit) if the niceness value is too small (less than -20). F_prohibited (with error bit) if unable to set the requested nice value (such as when limited by RLIMIT_NICE).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B niceness
+The nice value to assign. A higher value, meaning more nice, makes the process less important in the priority (low priority). A lower value, meaning less nice, makes the process more important in the priority (high priority).
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fInice()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_get.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_get.3
new file mode 100644 (file)
index 0000000..baa23d3
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_schedule_policy_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_policy_get \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_policy_get\fP(
+    \fBconst pid_t \fP\fIid\fP,
+    \fBint *const  \fP\fIpolicy\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the process policy.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID.
+
+.TP
+.B policy
+The retrieved policy.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_getscheduler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_robin_interval_get.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_robin_interval_get.3
new file mode 100644 (file)
index 0000000..0ea5b81
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_schedule_policy_robin_interval_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_policy_robin_interval_get \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_policy_robin_interval_get\fP(
+    \fBconst pid_t          \fP\fIid\fP,
+    \fBf_time_spec_t *const \fP\fIinterval\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the interval of the round-robin process policy.
+.PP
+Must not be NULL.
+.PP
+F_buffer (with error bit) if unable to populate interval with the time. F_parameter (with error bit) if a parameter is invalid. F_search (with error bit) if ID could not be found. F_support_not (with error bit) if the system call is not supported.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID.
+
+.TP
+.B interval
+The retrieved interval.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_rr_get_interval()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_set.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_policy_set.3
new file mode 100644 (file)
index 0000000..b1fabfa
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_schedule_policy_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_policy_set \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_policy_set\fP(
+    \fBconst pid_t                     \fP\fIid\fP,
+    \fBconst int                       \fP\fIpolicy\fP,
+    \fBconst f_schedule_value_t *const \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the process policy.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID, process group ID, or user ID.
+
+.TP
+.B policy
+The policy to set.
+
+.TP
+.B value
+The scheduler value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_setscheduler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get.3
new file mode 100644 (file)
index 0000000..98fbb3d
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_schedule_priority_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_priority_get \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_priority_get\fP(
+    \fBconst int  \fP\fItype\fP,
+    \fBconst id_t \fP\fIid\fP,
+    \fBint *const \fP\fIpriority\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the process priority.
+.PP
+The highest priority of anything associated with the given ID is returned.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) If caller has insufficient priviledges to get the priority. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B type
+The type being whose schedule priority is being retrieved One of f_schedule_priority_*_d.
+
+.TP
+.B id
+The process ID, process group ID, or user ID.
+
+.TP
+.B priority
+The retrieved priority.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIgetpriority()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get_max.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get_max.3
new file mode 100644 (file)
index 0000000..056a1e0
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_schedule_priority_get_max "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_priority_get_max \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_priority_get_max\fP(
+    \fBconst int  \fP\fItype\fP,
+    \fBint *const \fP\fIpriority\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the maximum process priority available.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) If caller has insufficient priviledges to get the priority. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B type
+The type being whose schedule priority is being retrieved One of f_schedule_priority_*_d.
+
+.TP
+.B priority
+The retrieved priority.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_get_priority_max()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get_min.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_get_min.3
new file mode 100644 (file)
index 0000000..2a0308a
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_schedule_priority_get_min "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_priority_get_min \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_priority_get_min\fP(
+    \fBconst int  \fP\fItype\fP,
+    \fBint *const \fP\fIpriority\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the minimum process priority available.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) If caller has insufficient priviledges to get the priority. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B type
+The type being whose schedule priority is being retrieved One of f_schedule_priority_*_d.
+
+.TP
+.B priority
+The retrieved priority.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_get_priority_min()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_set.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_priority_set.3
new file mode 100644 (file)
index 0000000..4c14896
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_schedule_priority_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_priority_set \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_priority_set\fP(
+    \fBconst int  \fP\fItype\fP,
+    \fBconst id_t \fP\fIid\fP,
+    \fBconst int  \fP\fIpriority\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the process priority.
+.PP
+F_access_denied (with error bit) If caller has insufficient priviledges to set the priority. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B type
+The type being whose schedule priority is being set One of f_schedule_priority_*_d.
+
+.TP
+.B id
+The process ID, process group ID, or user ID.
+
+.TP
+.B priority
+The priority to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsetpriority()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_value_get.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_value_get.3
new file mode 100644 (file)
index 0000000..4bcfa22
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_schedule_value_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_value_get \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_value_get\fP(
+    \fBconst pid_t               \fP\fIid\fP,
+    \fBf_schedule_value_t *const \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the schedule parameter value.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID.
+
+.TP
+.B value
+The retrieved scheduler value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_getparam()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_value_set.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_value_set.3
new file mode 100644 (file)
index 0000000..309e0cc
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_schedule_value_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_value_set \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_value_set\fP(
+    \fBconst pid_t                     \fP\fIid\fP,
+    \fBconst f_schedule_value_t *const \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the schedule parameter value.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if a ID is valid but the effective ID or real ID does not match the callers and CAP_SYS_NICE is not set. F_search (with error bit) if ID could not be found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The process ID, process group ID, or user ID.
+
+.TP
+.B value
+The scheduler value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_setparam()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_schedule/data/documentation/man/man3/f_schedule_yield.3 b/level_0/f_schedule/data/documentation/man/man3/f_schedule_yield.3
new file mode 100644 (file)
index 0000000..1c18801
--- /dev/null
@@ -0,0 +1,31 @@
+.TH f_schedule_yield "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_schedule_yield \-
+.SH SYNOPSIS
+.nf
+.B #include <schedule.h>
+.sp
+\fBf_status_t f_schedule_yield\fP(
+
+);
+.fi
+.SH DESCRIPTION
+.PP
+Explicitly release contol of the CPU so that other process threads can utilize the CPU.
+.PP
+F_failure (with error bit) on any other error.
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIschedule.h\fP(3), \fIf_schedule_affinity_get\fP(3), \fIf_schedule_affinity_set\fP(3), \fIf_schedule_attribute_get\fP(3), \fIf_schedule_attribute_set\fP(3), \fIf_schedule_nice\fP(3), \fIf_schedule_policy_get\fP(3), \fIf_schedule_policy_robin_interval_get\fP(3), \fIf_schedule_policy_set\fP(3), \fIf_schedule_priority_get\fP(3), \fIf_schedule_priority_get_max\fP(3), \fIf_schedule_priority_get_min\fP(3), \fIf_schedule_priority_set\fP(3), \fIf_schedule_value_get\fP(3), \fIf_schedule_value_set\fP(3), \fIf_schedule_yield\fP(3), \fIsched_yield()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple.3 b/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple.3
new file mode 100644 (file)
index 0000000..f34e397
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_serialize_from_simple "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_serialize_from_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <serialize.h>
+.sp
+\fBf_status_t f_serialize_from_simple\fP(
+    \fBconst f_string_static_t    \fP\fIsource\fP,
+    \fBf_string_dynamics_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Deserialize the entire serialize string into multiple separate strings using the Simple serialize algorithm.
+.PP
+The simple Serialize algorithm is akin to the PATH environment variable, example: PATH="/bin:/sbin:/usr/bin".
+.PP
+After processing the above example, there would be strings derived from the following positions: 1) start = 0, stop = 3. 2) start = 5, stop = 9. 3) start = 11, stop = 18.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_append().
+.SH PARAMETERS
+.TP
+.B source
+A serialized string to deserialize.
+
+.TP
+.B destination
+An array of strings deserialize from the source string. The individual strings will be NULL terminated after destination.used on success. All deserialized values are appended to the destination.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_complete_not_utf_eos if an incomplete UTF-8 character is found at the end of the source. F_data_not on success and source.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIserialize.h\fP(3), \fIf_serialize_from_simple\fP(3), \fIf_serialize_from_simple_get\fP(3), \fIf_serialize_from_simple_range\fP(3), \fIf_serialize_from_simple_select\fP(3), \fIf_serialize_to_simple\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_string_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_get.3 b/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_get.3
new file mode 100644 (file)
index 0000000..099a6f7
--- /dev/null
@@ -0,0 +1,76 @@
+.TH f_serialize_from_simple_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_serialize_from_simple_get \-
+.SH SYNOPSIS
+.nf
+.B #include <serialize.h>
+.sp
+\fBf_status_t f_serialize_from_simple_get\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unserialize and get a copy of a specific string using the Simple serialize algorithm.
+.PP
+The simple Serialize algorithm is akin to the PATH environment variable, example: PATH="/bin:/sbin:/usr/bin".
+.PP
+After processing the above example, there would be the following positions, for the given index: 1) with index = 0, start = 0, stop = 3. 2) with index = 1, start = 5, stop = 9. 3) with index = 2, start = 11, stop = 18.
+.PP
+F_complete_not_utf_eos (with error bit) if end of string is reached before a 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.
+.SH PARAMETERS
+.TP
+.B source
+A serialized string to deserialize.
+
+.TP
+.B index
+The selected position within the serialize string to get the deserialize positions of.
+
+.TP
+.B destination
+The deserialized string from the specified index. This string is NULL terminated after destination.used on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success at end of string. F_data_not_eos if end of string reached before index was reached (dynamic->used is set to 0). F_data_not on success and source.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIserialize.h\fP(3), \fIf_serialize_from_simple\fP(3), \fIf_serialize_from_simple_get\fP(3), \fIf_serialize_from_simple_range\fP(3), \fIf_serialize_from_simple_select\fP(3), \fIf_serialize_to_simple\fP(3), \fIf_serialize_from_simple_select()\fP, \fIf_string_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_range.3 b/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_range.3
new file mode 100644 (file)
index 0000000..964a476
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_serialize_from_simple_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_serialize_from_simple_range \-
+.SH SYNOPSIS
+.nf
+.B #include <serialize.h>
+.sp
+\fBf_status_t f_serialize_from_simple_range\fP(
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBf_ranges_t *const       \fP\fIranges\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify string positions within a serialize string using the Simple serialize algorithm.
+.PP
+The simple Serialize algorithm is akin to the PATH environment variable, example: PATH="/bin:/sbin:/usr/bin".
+.PP
+After processing the above example, there would be the following positions: 1) start = 0, stop = 3. 2) start = 5, stop = 9. 3) start = 11, stop = 18.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase()
+.SH PARAMETERS
+.TP
+.B source
+A serialized string to deserialize.
+
+.TP
+.B ranges
+The ranges within the serialize string representing distinct separate strings. All deserialized ranges are appended to the destination.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_complete_not_utf_eos if an incomplete UTF-8 character is found at the end of the source. F_data_not on success and source.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIserialize.h\fP(3), \fIf_serialize_from_simple\fP(3), \fIf_serialize_from_simple_get\fP(3), \fIf_serialize_from_simple_range\fP(3), \fIf_serialize_from_simple_select\fP(3), \fIf_serialize_to_simple\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_select.3 b/level_0/f_serialize/data/documentation/man/man3/f_serialize_from_simple_select.3
new file mode 100644 (file)
index 0000000..ecb31e7
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_serialize_from_simple_select "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_serialize_from_simple_select \-
+.SH SYNOPSIS
+.nf
+.B #include <serialize.h>
+.sp
+\fBf_status_t f_serialize_from_simple_select\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP,
+    \fBf_range_t *const          \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Deserialize and select the address for a specific string using the Simple serialize algorithm.
+.PP
+The simple serialize algorithm is akin to the PATH environment variable, example: PATH="/bin:/sbin:/usr/bin".
+.PP
+After processing the above example, there would be the following positions, for the given index: 1) with index = 0, start = 0, stop = 3. 2) with index = 1, start = 5, stop = 9. 3) with index = 2, start = 11, stop = 18.
+.PP
+F_complete_not_utf_eos (with error bit) if end of string is reached before a complete UTF-8 character can be processed. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B source
+A serialized string to deserialize.
+
+.TP
+.B index
+An index position within the serialize string to get the deserialize positions of.
+
+.TP
+.B range
+A range within the serialized string representing the string at the given index.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success at end of string. F_data_not on success and source.used is 0. F_data_not_eos if end of string reached before index was reached.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIserialize.h\fP(3), \fIf_serialize_from_simple\fP(3), \fIf_serialize_from_simple_get\fP(3), \fIf_serialize_from_simple_range\fP(3), \fIf_serialize_from_simple_select\fP(3), \fIf_serialize_to_simple\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_serialize/data/documentation/man/man3/f_serialize_to_simple.3 b/level_0/f_serialize/data/documentation/man/man3/f_serialize_to_simple.3
new file mode 100644 (file)
index 0000000..9f65f64
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_serialize_to_simple "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_serialize_to_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <serialize.h>
+.sp
+\fBf_status_t f_serialize_to_simple\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Serialized a string using the Simple serialize algorithm.
+.PP
+The simple Serialize algorithm is akin to the PATH environment variable, example: PATH="/bin:/sbin:/usr/bin".
+.PP
+To generate the above example, this would be called 3 times, with the following strings: 1) value = "/bin", then: PATH="/bin". 2) value = "/sbin", then: PATH="/bin:/sbin". 3) value = "/usr/sbin", then: PATH="/bin:/sbin:/usr/sbin".
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_string_dynamic_append_assure().
+.SH PARAMETERS
+.TP
+.B source
+The string to append onto serialize.
+
+.TP
+.B destination
+The dynamic string that to store the serialized string. This string will be NULL terminated after destination.used on success. All serialized values are appended to the destination.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success and source.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIserialize.h\fP(3), \fIf_serialize_from_simple\fP(3), \fIf_serialize_from_simple_get\fP(3), \fIf_serialize_from_simple_range\fP(3), \fIf_serialize_from_simple_select\fP(3), \fIf_serialize_to_simple\fP(3), \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_assure()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_action.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_action.3
new file mode 100644 (file)
index 0000000..1cebeef
--- /dev/null
@@ -0,0 +1,70 @@
+.TH f_signal_action "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_action \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_action\fP(
+    \fBconst f_signal_t              \fP\fIsignal\fP,
+    \fBconst struct sigaction *const \fP\fIaction\fP,
+    \fBstruct sigaction *const       \fP\fIprevious\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get or set the signal action handlers.
+.PP
+Set to NULL to not use.
+.PP
+F_buffer (with error bit) if the buffer is invalid (action or previous point to invalid memory). F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal settings.
+
+.TP
+.B action
+(optional) The signal action to use.
+
+.TP
+.B previous
+(optional) The previous signal action.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a signal type.
+.PP
+set: The signal set.
+.sp
+.RS
+.nf
+\fB
+struct f_signal_t {
+  int      \fIflags\fP;
+  int      \fIid\fP;
+  sigset_t \fIset\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigaction()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_close.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_close.3
new file mode 100644 (file)
index 0000000..b8eb015
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_signal_close "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_close \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_close\fP(
+    \fBf_signal_t *const \fP\fIsignal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Close an open signal descriptor.
+.PP
+The signal.id is set to -1 on success.
+.PP
+F_descriptor (with error bit) if id is an invalid descriptor. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal settings.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a signal type.
+.PP
+set: The signal set.
+.sp
+.RS
+.nf
+\fB
+struct f_signal_t {
+  int      \fIflags\fP;
+  int      \fIid\fP;
+  sigset_t \fIset\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but no descriptor was provided to close.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIclose()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_mask.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_mask.3
new file mode 100644 (file)
index 0000000..36e34ce
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_signal_mask "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_mask \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_mask\fP(
+    \fBconst int             \fP\fIhow\fP,
+    \fBconst sigset_t *const \fP\fInext\fP,
+    \fBsigset_t *const       \fP\fIcurrent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get or assign the current signal set in use.
+.PP
+Either set or previous may be NULL but not both (at least one is required).
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B how
+How to handle the signal. Set this to 0 when only trying to get the current signal set.
+
+.TP
+.B next
+(optional) The new set of signals to handle.
+
+.TP
+.B current
+(optional) The current set of signals being handled.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigprocmask()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_open.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_open.3
new file mode 100644 (file)
index 0000000..a106661
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_signal_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_open \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_open\fP(
+    \fBf_signal_t *const \fP\fIsignal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open a signal descriptor, listening for the given set of signals.
+.PP
+The signal.id is assigned with the signal descriptor on success.
+.PP
+If signal.id is -1, then a new file descriptor is created. Otherwise, signal.id is used as the file descriptor.
+.PP
+F_device_not (with error bit) if could not mount the internal inode device. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal settings.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a signal type.
+.PP
+set: The signal set.
+.sp
+.RS
+.nf
+\fB
+struct f_signal_t {
+  int      \fIflags\fP;
+  int      \fIid\fP;
+  sigset_t \fIset\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsignalfd()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_pause.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_pause.3
new file mode 100644 (file)
index 0000000..b224768
--- /dev/null
@@ -0,0 +1,29 @@
+.TH f_signal_pause "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_pause \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_pause\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Pause the current process until a signal is received.
+.SH RETURN VALUE
+.PP
+The received signal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIpause()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_queue.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_queue.3
new file mode 100644 (file)
index 0000000..5ff956f
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_signal_queue "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_queue \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_queue\fP(
+    \fBconst pid_t        \fP\fIid\fP,
+    \fBconst int          \fP\fIsignal\fP,
+    \fBconst union sigval \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send the signal and value to the given process.
+.PP
+F_found_not (with error bit) if the given PID was found. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if the max signals is reached. F_support_not (with error bit) if this action is not supported by the current OS.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The PID to signal.
+
+.TP
+.B signal
+The signal to send to the thread.
+
+.TP
+.B value
+The signal value to send.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigqueue()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_read.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_read.3
new file mode 100644 (file)
index 0000000..b93af75
--- /dev/null
@@ -0,0 +1,70 @@
+.TH f_signal_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_read \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_read\fP(
+    \fBconst f_signal_t               \fP\fIsignal\fP,
+    \fBconst int                      \fP\fItimeout\fP,
+    \fBstruct signalfd_siginfo *const \fP\fIinformation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a current process signal, if one exists.
+.PP
+For a more generalized call to poll() look at f_file_poll().
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_descriptor (with error bit) if the signal descriptor is invalid. F_file_closed (with error bit) if the signal descriptor stream is closed. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid. F_stream (with error bit) when the poll() returns POLLERR (file stream error). F_input_output (with error bit) on I/O error. F_file_type_directory (with error bit) if file descriptor represents a directory.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal settings.
+
+.TP
+.B timeout
+Block for the number of milliseconds, waiting for a signal. A value of 0 means that this will not block.
+
+.TP
+.B information
+The signal data to be populated if a signal is found during read.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a signal type.
+.PP
+set: The signal set.
+.sp
+.RS
+.nf
+\fB
+struct f_signal_t {
+  int      \fIflags\fP;
+  int      \fIid\fP;
+  sigset_t \fIset\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found. F_data_not on success, but no descriptor was provided to read. F_signal on success and signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIf_file_poll()\fP, \fIpoll()\fP, \fIread()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_send.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_send.3
new file mode 100644 (file)
index 0000000..c6ffec4
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_signal_send "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_send \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_send\fP(
+    \fBconst int   \fP\fIsignal\fP,
+    \fBconst pid_t \fP\fIprocess_id\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send a signal to a process.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to send signals to the given process. F_found_not (with error bit) if the given process was not found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal to send
+
+.TP
+.B process_id
+The process id (PID) that will receive the signal. This may also be a process group id.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIkill()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_set_add.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_set_add.3
new file mode 100644 (file)
index 0000000..735484d
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_signal_set_add "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_set_add \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_set_add\fP(
+    \fBconst int       \fP\fIsignal\fP,
+    \fBsigset_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add a signal to the given set of signals.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal to add.
+
+.TP
+.B set
+The set of signals to add to.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigaddset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_set_delete.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_set_delete.3
new file mode 100644 (file)
index 0000000..0173bb4
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_signal_set_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_set_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_set_delete\fP(
+    \fBconst int       \fP\fIsignal\fP,
+    \fBsigset_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a signal from a given set of signals.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal to add.
+
+.TP
+.B set
+The set of signals to delete from.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigdelset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_set_empty.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_set_empty.3
new file mode 100644 (file)
index 0000000..a7d1978
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_signal_set_empty "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_set_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_set_empty\fP(
+    \fBsigset_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Clear a given set of signals.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B set
+The set of signals to clear.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigemptyset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_set_fill.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_set_fill.3
new file mode 100644 (file)
index 0000000..51959d6
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_signal_set_fill "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_set_fill \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_set_fill\fP(
+    \fBsigset_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add all known signals to a given set of signals.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B set
+The set of signals to fully populate.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigfillset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_set_has.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_set_has.3
new file mode 100644 (file)
index 0000000..7948013
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_signal_set_has "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_set_has \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_set_has\fP(
+    \fBconst int             \fP\fIsignal\fP,
+    \fBconst sigset_t *const \fP\fIset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the given signal set has a given signal.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B signal
+The signal to search for.
+
+.TP
+.B set
+The set of signals to search in.
+
+.SH RETURN VALUE
+.PP
+F_true if signal is found. F_false if signal is not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigismember()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_suspend.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_suspend.3
new file mode 100644 (file)
index 0000000..49281dc
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_signal_suspend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_suspend \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_suspend\fP(
+    \fBconst sigset_t *const \fP\fImask\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Suspend the current process until one of the provided signals is received.
+.PP
+F_buffer (with error bit) if the mask is pointing to invalid memory. F_interrupt (with error bit) when program received an interrupt signal, halting operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mask
+The signal mask.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigsuspend()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_wait.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_wait.3
new file mode 100644 (file)
index 0000000..53a308a
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_signal_wait "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_wait \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_wait\fP(
+    \fBconst sigset_t *const \fP\fIset\fP,
+    \fBsiginfo_t *const      \fP\fIinformation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Wait until any signal in a set of signals is received.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B set
+The set of signals to wait for.
+
+.TP
+.B information
+(optional) The resulting signal information.
+
+.SH RETURN VALUE
+.PP
+F_okay if signal is found. F_interrupt if interrupted by a signal other than one specified in the signal set.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigwaitinfo()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_signal/data/documentation/man/man3/f_signal_wait_until.3 b/level_0/f_signal/data/documentation/man/man3/f_signal_wait_until.3
new file mode 100644 (file)
index 0000000..16d945e
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_signal_wait_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_signal_wait_until \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBf_status_t f_signal_wait_until\fP(
+    \fBconst sigset_t *const      \fP\fIset\fP,
+    \fBconst f_time_spec_t *const \fP\fItimeout\fP,
+    \fBsiginfo_t *const           \fP\fIinformation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Wait until any signal in a set of signals is received until the given time out is reached.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B set
+The set of signals to wait for.
+
+.TP
+.B timeout
+The amount of time to wait.
+
+.TP
+.B information
+(optional) The resulting signal information.
+
+.SH RETURN VALUE
+.PP
+F_okay if signal is found before time out. F_interrupt if interrupted by a signal other than one specified in the signal set. F_time_out if no signal is find by the time out.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIf_signal_action\fP(3), \fIf_signal_close\fP(3), \fIf_signal_mask\fP(3), \fIf_signal_open\fP(3), \fIf_signal_pause\fP(3), \fIf_signal_queue\fP(3), \fIf_signal_read\fP(3), \fIf_signal_send\fP(3), \fIf_signal_set_add\fP(3), \fIf_signal_set_delete\fP(3), \fIf_signal_set_empty\fP(3), \fIf_signal_set_fill\fP(3), \fIf_signal_set_has\fP(3), \fIf_signal_suspend\fP(3), \fIf_signal_wait\fP(3), \fIf_signal_wait_until\fP(3), \fIsigtimedwait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_accept.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_accept.3
new file mode 100644 (file)
index 0000000..6787ed0
--- /dev/null
@@ -0,0 +1,70 @@
+.TH f_socket_accept "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_accept \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_accept\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Retrieve a client connection from a listening socket.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer_scope_out (with error bit) if the buffer is invalid. F_buffer_sufficient_not (with error bit) if unable to create socket due to resource restrictions (maps to ENOBUFS). F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_network_client_not (with error bit) if the client is down. F_network_device_not (with error bit) if the network device no longer exists. F_network_down (with error bit) if network is down. F_network_client_reach_not (with error bit) if the client cannot be reached. F_network_reach_not (with error bit) if the network cannot be reached. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation. F_protocol (with error bit) if a protocol error occurred. F_protocol_not (with error bit) if the given protocol is unknown or is unsupported. F_protocol_option_not (with error bit) if the given protocol option is unknown or is unsupported. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_stream_not (with error bit) the socket type is not a stream. F_socket_support_not (with error bit) if this socket type is not supported. F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The client socket structure. The structure should be memset as appropriate before calling this. The socket.id is the socket file descriptor used to establish the data file descriptor socket.id_data. The socket.id_data, socket.address, and socket.length are updated upon a successful return.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIaccept()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_addressss_delete_callback.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_addressss_delete_callback.3
new file mode 100644 (file)
index 0000000..0e0f40f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_socket_addressss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_addressss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <address.h>
+.sp
+\fBf_status_t f_socket_addressss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_socket_addressss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaddress.h\fP(3), \fIf_socket_addressss_delete_callback\fP(3), \fIf_socket_addressss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_addressss_destroy_callback.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_addressss_destroy_callback.3
new file mode 100644 (file)
index 0000000..1a309c2
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_socket_addressss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_addressss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <address.h>
+.sp
+\fBf_status_t f_socket_addressss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_socket_addressss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIaddress.h\fP(3), \fIf_socket_addressss_delete_callback\fP(3), \fIf_socket_addressss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_bind.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_bind.3
new file mode 100644 (file)
index 0000000..4ce2ea8
--- /dev/null
@@ -0,0 +1,78 @@
+.TH f_socket_bind "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_bind \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_bind\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Bind a socket to a name.
+.PP
+For IPv4: The socket.address.inet4.sin_family is directly assigned to f_socket_address_family_inet4_e. The socket.domain (potocol family) must be assigned to f_socket_protocol_family_inet4_e. The socket.length is updated to represent the size of "struct sockaddr_in". The socket.type is not modified.
+.PP
+For IPv6: The socket.address.inet4.sin_family is directly assigned to f_socket_address_family_inet6_e. The socket.domain (potocol family) must be assigned to f_socket_protocol_family_inet6_e. The socket.length is updated to represent the size of "struct sockaddr_in6". The socket.type is not modified.
+.PP
+For local (UNIX socket): The socket.address.local.sun_family is directly assigned to f_socket_address_family_local_e. The socket.address.local.sun_path is updated with the value from socket.name.string. The socket.domain (potocol family) must be assigned to f_socket_protocol_family_local_e. The socket.length is updated to represent the size of "struct sockaddr_un". The socket.name must be assigned to a path. The socket.type is not modified.
+.PP
+For generic or unknown (failsafe): The socket.address.inet4.sin_family is directly assigned to f_socket_address_family_unspecified_e. The socket.domain (potocol family) must be assigned to f_socket_protocol_family_unspecified_e. The socket.length is updated to represent the size of "struct sockaddr". The socket.type is not modified.
+.PP
+Must not be NULL.
+.PP
+F_available_not_address (with error bit) if address is unavailable (is non-existent or not local). F_buffer_scope_out (with error bit) if the buffer is out of scope. F_busy_address (with error bit) if address is already in use (therefore unavailable). F_directory_found_not (with error bit) if directory was not found. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_file_found_not (with error bit) if file not found. F_file_system_read_only (with error bit) if the file system is read-only when a write is needed. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_socket_not (with error bit) if the ID is not a socket descriptor. F_string_too_large (with error bit) if string is too large to store in the buffer.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.address may be any valid structure, like "struct sockaddr", "struct sockaddr_un", or "struct sockaddr_in". The socket.address.*.*_family is conditionally altered by this function. The caller must appropriately initialize and configure the socket.address. The socket.length is updated based on socket.form. The socket.id must refer to a valid socket file descriptor.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIbind()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_connect.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_connect.3
new file mode 100644 (file)
index 0000000..ff6f2a4
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_socket_connect "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_connect \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_connect\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Connect to a socket.
+.PP
+This connects the socket against socket.id. Check the individual read/write socket functions to confirm or deny whether or not this socket.id or socket.id_data is to be used.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_available_not_address (with error bit) if address is unavailable (is non-existent or not local). F_busy_address (with error bit) if address is already in use (therefore unavailable). F_connect (with error bit) if already connected. F_connect_busy (with error bit) if a non-blocking connection attempt is not yet completed. F_connect_refuse (with error bit) if connection is refused because there is nothing listening. F_domain_not (with error bit) if the given domain is unknown or is unsupported. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_fire_wall_block (with error bit) if the blocked by fire wall (or if broadcast without broadcast flag is attempted). F_interrupt (with error bit) if interrupt is received. F_network_reach_not (with error bit) if the network is unreachable. F_parameter (with error bit) if a parameter is invalid. F_progress (with error bit) if if a non-blocking connection cannot be completed immediately. F_protocol_not (with error bit) if the given protocol is unknown or is unsupported. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.address must have the proper structure setup based on the socket.type value, like "f_socket_address_family_inet4_e". Only domains defined with an associated structure in the f_socket_address_t are supported. Only socket.id is used. The socket.length is updated based on socket.form.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_descriptor_not if socket file descriptor is not valid (socket.id == -1).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIconnect()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_create.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_create.3
new file mode 100644 (file)
index 0000000..2612eb9
--- /dev/null
@@ -0,0 +1,70 @@
+.TH f_socket_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_create \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_create\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a new socket.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer_sufficient_not (with error bit) if unable to create socket due to resource restrictions (maps to ENOBUFS). F_domain_not (with error bit) if the given domain is unknown or is unsupported. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_protocol_not (with error bit) if the given protocol is unknown or is unsupported. F_socket_support_not (with error bit) if the given socket type is unknown or is unsupported.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.address may point to any valid structure, like "struct sockaddr", "struct sockaddr_un", or "struct sockaddr_in". The socket.domain must be assigned the desired domain (protocol family). The socket.protocol must be assigned the desired protocol. The socket.type must be assigned the desired socket type. The socket.id will be updated with a file descriptor representing the created socket.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIsocket()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_create_pair.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_create_pair.3
new file mode 100644 (file)
index 0000000..4289c85
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_socket_create_pair "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_create_pair \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_create_pair\fP(
+    \fBconst int  \fP\fIdomain\fP,
+    \fBconst int  \fP\fIprotocol\fP,
+    \fBconst int  \fP\fItype\fP,
+    \fBint *const \fP\fIid_1\fP,
+    \fBint *const \fP\fIid_2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a new pair of identical sockets.
+.PP
+This is generally intended to be used for pipes.
+.PP
+This socket is supposed to be identical to the one specified by id_1.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer_sufficient_not (with error bit) if unable to create socket due to resource restrictions (maps to ENOBUFS). F_domain_not (with error bit) if the given domain is unknown or is unsupported. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_protocol_not (with error bit) if the given protocol is unknown or is unsupported.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B domain
+The protocol family.
+
+.TP
+.B protocol
+The protocol to use.
+
+.TP
+.B type
+The communication type.
+
+.TP
+.B id_1
+The first of the pair of socket file descriptors.
+
+.TP
+.B id_2
+The second of the pair of socket file descriptors.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIsocketpair()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_disconnect.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_disconnect.3
new file mode 100644 (file)
index 0000000..4603178
--- /dev/null
@@ -0,0 +1,79 @@
+.TH f_socket_disconnect "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_disconnect \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_disconnect\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst uint8_t     \fP\fIaction\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Terminate a socket connection.
+.PP
+The shutdown() call is used for all actions, except f_socket_close_fast_e. When shutdown() is called, a proper network disconnection process is initiated. The network connection will properly send the FIN packets. The shutdown() also allows current buffers to be properly flushed. The file descriptor is not closed. The remaining buffer can still be processed. Be sure to call either this function again with f_socket_close_fast_e or call f_file_close() directly.
+.PP
+When action is f_socket_close_fast_e, then close() is called. What happens then is that rather than waiting for FIN a RST is immediately sent (RST is sent only if connection is still active). All buffers are discarded. The connection is immediately removed. Thus, f_socket_close_fast_e (calling close()) on a socket results in bad network practice.
+.PP
+In the above cases, whether or not a RST or FIN are sent is also dependent on whether the f_socket_option_linger_d is used (SO_LINGER).
+.PP
+F_busy_address (with error bit) if address is already in use (therefore unavailable). F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_input_output (with error bit) if an I/O error occurred. F_interrupt (with error bit) when program received an interrupt signal, halting operation. F_parameter (with error bit) if a parameter is invalid. F_socket_not (with error bit) if the ID is not a socket descriptor. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_support_not (with error bit) if this socket does not support the listen() operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id must represent a valid socket file descriptor.
+
+.TP
+.B action
+The action to perform on close. f_socket_close_fast_e calls close().
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_connect_not if the socket is not connected. F_file_descriptor_not if socket.id is -1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIf_file_close()\fP, \fIclose()\fP, \fIshutdown()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_listen.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_listen.3
new file mode 100644 (file)
index 0000000..4e2ee0c
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_socket_listen "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_listen \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_listen\fP(
+    \fBf_socket_t *const  \fP\fIsocket\fP,
+    \fBconst unsigned int \fP\fIbacklog_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the socket to listen mode (passive socket).
+.PP
+F_busy_address (with error bit) if address is already in use (therefore unavailable). F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_socket_not (with error bit) if the ID is not a socket descriptor. F_support_not (with error bit) if this socket does not support the listen() operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id must represent a valid socket file descriptor.
+
+.TP
+.B backlog_max
+The max length of the pending connections queue. Suggested default setting: 8.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIlisten()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_name_host.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_name_host.3
new file mode 100644 (file)
index 0000000..342760d
--- /dev/null
@@ -0,0 +1,79 @@
+.TH f_socket_name_host "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_name_host \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_name_host\fP(
+    \fBf_socket_t *const         \fP\fIsocket\fP,
+    \fBf_string_dynamic_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the host name from a socket.
+.PP
+The host is the name of the local connection on the socket.
+.PP
+Must not be NULL.
+.PP
+F_buffer_not (with error bit) if the name buffer is invalid. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the system does not permit this operation (could be missing CAP_SYS_ADMIN in the appropraite user namespace). F_string_too_large (with error bit) if the name is to large for the max size (name.size).
+.PP
+F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_memory_array_resize()
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id must represent a valid socket file descriptor. The socket.size_read is used to represent the buffer size in buffer and must not be larger than the actual size of the buffer.
+
+.TP
+.B name
+The retrieved host name. The name.size is used to determine as the max size. If name.size is 0, then a default max (F_socket_default_name_max_d) is used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIf_memory_array_resize()\fP, \fIgethostname()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_name_peer.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_name_peer.3
new file mode 100644 (file)
index 0000000..dc72526
--- /dev/null
@@ -0,0 +1,72 @@
+.TH f_socket_name_peer "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_name_peer \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_name_peer\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the peer name from a socket.
+.PP
+The peer is the name of the remote connection on the socket. The name of the remote connection refers to the connection itself such as the socket file name or the ip address and the port numbers.
+.PP
+Must not be NULL.
+.PP
+F_buffer_scope_out (with error bit) if the buffer is invalid. F_buffer_sufficient_not (with error bit) due to resource restrictions (maps to ENOBUFS). F_connect_not (with error bit) if the socket is not connected. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_parameter (with error bit) if a parameter is invalid. F_socket_not (with error bit) if the ID is not a socket descriptor.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id must represent a valid socket file descriptor. The socket.size_read is used to represent the buffer size in buffer and must not be larger than the actual size of the buffer. The socket.address is used to store the name of the remote connection.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIgetpeername()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_option_get.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_option_get.3
new file mode 100644 (file)
index 0000000..90e6812
--- /dev/null
@@ -0,0 +1,90 @@
+.TH f_socket_option_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_option_get \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_option_get\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst int         \fP\fIlevel\fP,
+    \fBconst int         \fP\fIoption\fP,
+    \fBvoid *const       \fP\fIvalue\fP,
+    \fBsocklen_t *const  \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a socket option value.
+.PP
+Must not be NULL.
+.PP
+F_buffer_scope_out (with error bit) if the given address is out of scope. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_protocol_option_not (with error bit) if the given protocol option is unknown or is unsupported. F_socket_not (with error bit) if the ID is not a socket descriptor. F_value (with error bit) if either the value or the length is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id must represent a valid socket file descriptor.
+
+.TP
+.B level
+The level in which the socket option is located. This may be synonymous with "layer".
+
+.TP
+.B option
+The option code used to represent the option name.
+
+.TP
+.B value
+The value to assign.
+
+.TP
+.B length
+The length of the value (often derived from a sizeof() call).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIgetsockopt()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_option_set.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_option_set.3
new file mode 100644 (file)
index 0000000..ca6ced9
--- /dev/null
@@ -0,0 +1,88 @@
+.TH f_socket_option_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_option_set \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_option_set\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst int         \fP\fIlevel\fP,
+    \fBconst int         \fP\fIoption\fP,
+    \fBconst void *const \fP\fIvalue\fP,
+    \fBconst socklen_t   \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set a socket option value.
+.PP
+F_buffer_scope_out (with error bit) if the given value is out of scope. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_protocol_option_not (with error bit) if the given protocol option is unknown or is unsupported. F_socket_not (with error bit) if the ID is not a socket descriptor. F_value (with error bit) if either the value or the length is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id must represent a valid socket file descriptor.
+
+.TP
+.B level
+The level in which the socket option is located. This may be synonymous with "layer".
+
+.TP
+.B option
+The option code used to represent the option name.
+
+.TP
+.B value
+The value to assign.
+
+.TP
+.B length
+The length of the value (often derived from a sizeof() call).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIsetsockopt()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_read.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_read.3
new file mode 100644 (file)
index 0000000..a46fe55
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_socket_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_read \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_read\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst int         \fP\fIflags\fP,
+    \fBvoid *const       \fP\fIbuffer\fP,
+    \fBsize_t *const     \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read from a socket.
+.PP
+This is the recommneded way to read UDP streams.
+.PP
+This uses the socket.id_data and not the socket.id for processing the data.
+.PP
+Set to NULL to not use.
+.PP
+F_access_denied (with error bit) on access denied. F_address_not (with error bit) if no address is provided and the connection is not "connection-mode". F_buffer_scope_out (with error bit) if the buffer is out of scope. F_complete_not (with error bit) if an existing connection is not yet complete. F_connect_not (with error bit) if the socket is not connected. F_connect_refuse (with error bit) if connection is refused. F_connect_reset (with error bit) if connection is reset. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_socket_option_not (with error bit) if the given protocol option is unknown or is unsupported. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the insufficient privileges to perform read. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a valid socket descriptor. F_socket_pipe_close (with error bit) if the local end of a connection oriented socket is closed or SIGPIPE is received. F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id_data must represent a valid file descriptor. The socket.size_read is used to represent the buffer size in buffer and must not be larger than the actual size of the buffer.
+
+.TP
+.B flags
+Read flags.
+
+.TP
+.B buffer
+The buffer to populate.
+
+.TP
+.B length
+(optional) The length of the buffer. This gets replaced with the value of a positive ssize_t representing the length read. Data may be lost if the amount of data read is larger than given buffer length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but read size is 0 and so nothing was read.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIrecvfrom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_read_message.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_read_message.3
new file mode 100644 (file)
index 0000000..1a3c814
--- /dev/null
@@ -0,0 +1,85 @@
+.TH f_socket_read_message "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_read_message \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_read_message\fP(
+    \fBf_socket_t *const    \fP\fIsocket\fP,
+    \fBconst int            \fP\fIflags\fP,
+    \fBstruct msghdr *const \fP\fIheader\fP,
+    \fBsize_t *const        \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a message from a socket.
+.PP
+This uses the socket.id_data and not the socket.id for processing the data.
+.PP
+F_access_denied (with error bit) on access denied. F_address_not (with error bit) if no address is provided and the connection is not "connection-mode". F_buffer_scope_out (with error bit) if the buffer is out of scope. F_complete_not (with error bit) if an existing connection is not yet complete. F_connect_not (with error bit) if the socket is not connected. F_connect_refuse (with error bit) if connection is refused. F_connect_reset (with error bit) if connection is reset. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_option_not (with error bit) if a flag is not supported. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the insufficient privileges to perform read. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_pipe_close (with error bit) if the local end of a connection oriented socket is closed or SIGPIPE is received. F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id_data must represent a valid file descriptor.
+
+.TP
+.B flags
+Read flags.
+
+.TP
+.B header
+The message header.
+
+.TP
+.B length
+(optional) The length of the buffer. This gets replaced with the value of a positive ssize_t representing the length read. Data may be lost if the amount of data read is larger than given buffer length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but read size is 0 and so nothing was read.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIrecvmsg()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_read_stream.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_read_stream.3
new file mode 100644 (file)
index 0000000..6162b85
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_socket_read_stream "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_read_stream \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_read_stream\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst int         \fP\fIflags\fP,
+    \fBvoid *const       \fP\fIbuffer\fP,
+    \fBsize_t *const     \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read from a socket stream.
+.PP
+This is the recommneded way to read TCP streams.
+.PP
+This uses the socket.id_data and not the socket.id for processing the data.
+.PP
+Set to NULL to not use.
+.PP
+F_access_denied (with error bit) on access denied. F_address_not (with error bit) if no address is provided and the connection is not "connection-mode". F_buffer_scope_out (with error bit) if the buffer is invalid. F_complete_not (with error bit) if an existing connection is not yet complete. F_connect_not (with error bit) if the socket is not connected. F_connect_refuse (with error bit) if connection is refused. F_connect_reset (with error bit) if connection is reset. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_option_not (with error bit) if a flag is not supported. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the insufficient privileges to perform read. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_pipe_close (with error bit) if the local end of a connection oriented socket is closed or SIGPIPE is received. F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id_data must represent a valid file descriptor. The socket.size_read is used to represent the buffer size in buffer and must not be larger than the actual size of the buffer.
+
+.TP
+.B flags
+Read flags.
+
+.TP
+.B buffer
+The buffer to populate.
+
+.TP
+.B length
+(optional) The length of the buffer. This gets replaced with the value of a positive ssize_t representing the length read. Data may be lost if the amount of data read is larger than given buffer length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but read size is 0 and so nothing was read.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIrecv()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_write.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_write.3
new file mode 100644 (file)
index 0000000..bb0432e
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_socket_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_write \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_write\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst int         \fP\fIflags\fP,
+    \fBvoid *const       \fP\fIbuffer\fP,
+    \fBsize_t *const     \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send to a socket.
+.PP
+This is the recommneded way to write UDP streams.
+.PP
+This uses the socket.id_data and not the socket.id for processing the data.
+.PP
+Set to NULL to not use.
+.PP
+F_access_denied (with error bit) on access denied. F_address_not (with error bit) if no address is provided and the connection is not "connection-mode". F_buffer_not (with error bit) if the buffer is invalid. F_buffer_sufficient_not (with error bit) if unable to send message because output buffer is full. F_complete_not (with error bit) if an existing connection is not yet complete. F_connect (with error bit) if an address is provided and the connection is "connection-mode". F_connect_not (with error bit) if the socket is not connected. F_connect_refuse (with error bit) if connection is refused. F_connect_reset (with error bit) if connection is reset. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_option_not (with error bit) if a flag is not supported. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the insufficient privileges to perform send. F_size (with error bit) if size of message makes atomically sending message impossible on a socket type that requires this to be atomic. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_pipe_close (with error bit) if the local end of a connection oriented socket is closed or SIGPIPE is received (Linux might return this isntead if F_connect_not). F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id_data must represent a valid socket file descriptor. The socket.size_write is used to represent the buffer size in buffer and must not be larger than the actual size of the buffer.
+
+.TP
+.B flags
+Read flags.
+
+.TP
+.B buffer
+The buffer to populate.
+
+.TP
+.B length
+(optional) The length of the buffer. This gets replaced with the value of a positive ssize_t representing the length send. Data may be lost if the amount of data send is larger than given buffer length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but write size is 0 and so nothing was written.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIsendto()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_write_message.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_write_message.3
new file mode 100644 (file)
index 0000000..43b0905
--- /dev/null
@@ -0,0 +1,85 @@
+.TH f_socket_write_message "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_write_message \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_write_message\fP(
+    \fBf_socket_t *const    \fP\fIsocket\fP,
+    \fBconst int            \fP\fIflags\fP,
+    \fBstruct msghdr *const \fP\fIheader\fP,
+    \fBsize_t *const        \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send a message to a socket.
+.PP
+This uses the socket.id_data and not the socket.id for processing the data.
+.PP
+F_access_denied (with error bit) on access denied. F_address_not (with error bit) if no address is provided and the connection is not "connection-mode". F_buffer_not (with error bit) if the buffer is invalid. F_buffer_sufficient_not (with error bit) if unable to send message because output buffer is full. F_complete_not (with error bit) if an existing connection is not yet complete. F_connect (with error bit) if an address is provided and the connection is "connection-mode". F_connect_not (with error bit) if the socket is not connected. F_connect_refuse (with error bit) if connection is refused. F_connect_reset (with error bit) if connection is reset. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_option_not (with error bit) if a flag is not supported. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the insufficient privileges to perform send. F_size (with error bit) if size of message makes atomically sending message impossible on a socket type that requires this to be atomic. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_pipe_close (with error bit) if the local end of a connection oriented socket is closed or SIGPIPE is received (Linux might return this isntead if F_connect_not). F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id_data must represent a valid file descriptor.
+
+.TP
+.B flags
+Read flags.
+
+.TP
+.B header
+The message header.
+
+.TP
+.B length
+(optional) The length of the buffer. This gets replaced with the value of a positive ssize_t representing the length send. Data may be lost if the amount of data send is larger than given buffer length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but write size is 0 and so nothing was written.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIsendmsg()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socket_write_stream.3 b/level_0/f_socket/data/documentation/man/man3/f_socket_write_stream.3
new file mode 100644 (file)
index 0000000..7293b76
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_socket_write_stream "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socket_write_stream \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socket_write_stream\fP(
+    \fBf_socket_t *const \fP\fIsocket\fP,
+    \fBconst int         \fP\fIflags\fP,
+    \fBvoid *const       \fP\fIbuffer\fP,
+    \fBsize_t *const     \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send to a socket.
+.PP
+This is the recommneded way to write TCP streams.
+.PP
+This uses the socket.id_data and not the socket.id for processing the data.
+.PP
+Set to NULL to not use.
+.PP
+F_access_denied (with error bit) on access denied. F_address_not (with error bit) if no address is provided and the connection is not "connection-mode". F_buffer_not (with error bit) if the buffer is invalid. F_buffer_sufficient_not (with error bit) if unable to send message because output buffer is full. F_complete_not (with error bit) if an existing connection is not yet complete. F_connect (with error bit) if an address is provided and the connection is "connection-mode". F_connect_not (with error bit) if the socket is not connected. F_connect_refuse (with error bit) if connection is refused. F_connect_reset (with error bit) if connection is reset. F_file_descriptor_not (with error bit) if ID is an invalid descriptor. F_interrupt (with error bit) if interrupt is received. F_memory_not (with error bit) if out of memory. F_option_not (with error bit) if a flag is not supported. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the insufficient privileges to perform send. F_size (with error bit) if size of message makes atomically sending message impossible on a socket type that requires this to be atomic. F_socket_block (with error bit) if socket is blocked. F_socket_not (with error bit) if the ID is not a socket descriptor. F_socket_pipe_close (with error bit) if the local end of a connection oriented socket is closed or SIGPIPE is received (Linux might return this isntead if F_connect_not). F_socket_time_out (with error bit) if a socket timeout occurred.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B socket
+The socket structure. The socket.id_data must represent a valid socket file descriptor. The socket.size_write is used to represent the buffer size in buffer and must not be larger than the actual size of the buffer.
+
+.TP
+.B flags
+Read flags.
+
+.TP
+.B buffer
+The buffer to populate.
+
+.TP
+.B length
+(optional) The length of the buffer. This gets replaced with the value of a positive ssize_t representing the length send. Data may be lost if the amount of data send is larger than given buffer length.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used socket related properties, loosely based off of f_file_t.
+.PP
+name: The name of the socket, if a name is given (for UNIX sockets this represents the path) (Must be a NULL terminated string).
+.PP
+The clear and reset macros do not clear or reset the address (type f_socket_address_t) because the struct sockaddr is defined outside of the FLL project.
+.sp
+.RS
+.nf
+\fB
+struct f_socket_t {
+  int                \fIid\fP;
+  int                \fIid_data\fP;
+  int                \fIdomain\fP;
+  int                \fIprotocol\fP;
+  int                \fItype\fP;
+  uint16_t           \fIform\fP;
+  size_t             \fIsize_read\fP;
+  size_t             \fIsize_write\fP;
+  f_socket_address_t \fIaddress\fP;
+  socklen_t          \fIlength\fP;
+  f_string_static_t  \fIname\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but write size is 0 and so nothing was written.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socket_accept\fP(3), \fIf_socket_bind\fP(3), \fIf_socket_connect\fP(3), \fIf_socket_create\fP(3), \fIf_socket_create_pair\fP(3), \fIf_socket_disconnect\fP(3), \fIf_socket_listen\fP(3), \fIf_socket_name_host\fP(3), \fIf_socket_name_peer\fP(3), \fIf_socket_option_get\fP(3), \fIf_socket_option_set\fP(3), \fIf_socket_read\fP(3), \fIf_socket_read_message\fP(3), \fIf_socket_read_stream\fP(3), \fIf_socket_write\fP(3), \fIf_socket_write_message\fP(3), \fIf_socket_write_stream\fP(3), \fIsend()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socketss_delete_callback.3 b/level_0/f_socket/data/documentation/man/man3/f_socketss_delete_callback.3
new file mode 100644 (file)
index 0000000..779ecce
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_socketss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socketss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socketss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_socketss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socketss_delete_callback\fP(3), \fIf_socketss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_socket/data/documentation/man/man3/f_socketss_destroy_callback.3 b/level_0/f_socket/data/documentation/man/man3/f_socketss_destroy_callback.3
new file mode 100644 (file)
index 0000000..3941971
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_socketss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_socketss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <socket.h>
+.sp
+\fBf_status_t f_socketss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_socketss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsocket.h\fP(3), \fIf_socketss_delete_callback\fP(3), \fIf_socketss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_status/data/documentation/man/man3/f_statusss_delete_callback.3 b/level_0/f_status/data/documentation/man/man3/f_statusss_delete_callback.3
new file mode 100644 (file)
index 0000000..f7025f7
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_statusss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_statusss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <status.h>
+.sp
+\fBf_status_t f_statusss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_statusss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus.h\fP(3), \fIf_statusss_delete_callback\fP(3), \fIf_statusss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_status/data/documentation/man/man3/f_statusss_destroy_callback.3 b/level_0/f_status/data/documentation/man/man3/f_statusss_destroy_callback.3
new file mode 100644 (file)
index 0000000..eb37288
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_statusss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_statusss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <status.h>
+.sp
+\fBf_status_t f_statusss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_statusss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus.h\fP(3), \fIf_statusss_delete_callback\fP(3), \fIf_statusss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_status_string/data/documentation/man/man3/f_status_string_to.3 b/level_0/f_status_string/data/documentation/man/man3/f_status_string_to.3
new file mode 100644 (file)
index 0000000..e8ff15f
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_status_string_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_status_string_to \-
+.SH SYNOPSIS
+.nf
+.B #include <status_string.h>
+.sp
+\fBf_status_t f_status_string_to\fP(
+    \fBconst f_status_t         \fP\fIcode\fP,
+    \fBf_string_static_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert status codes to their string representation.
+.PP
+The error, warning, and signal bits are ignored.
+.PP
+F_data (with error bit) if there status is unknown. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B code
+The status number to process.
+
+.TP
+.B name
+The processed code name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus_string.h\fP(3), \fIf_status_string_to\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_append.3
new file mode 100644 (file)
index 0000000..6a6a250
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_string_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_append \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_append\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_append_assure.3 b/level_0/f_string/data/documentation/man/man3/f_string_append_assure.3
new file mode 100644 (file)
index 0000000..99fb9f3
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_string_append_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_append_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_append_assure\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_append_assure_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_append_assure_nulless.3
new file mode 100644 (file)
index 0000000..494f997
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_string_append_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_append_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_append_assure_nulless\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+This ignores NULL characters when comparing both the source and the destination. Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_append_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_append_nulless.3
new file mode 100644 (file)
index 0000000..0186446
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_string_append_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_append_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_append_nulless\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append.3
new file mode 100644 (file)
index 0000000..b65e7da
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_string_dynamic_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_append\fP(
+    \fBconst f_string_dynamic_t  \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_assure.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_assure.3
new file mode 100644 (file)
index 0000000..ee68d41
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_string_dynamic_append_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_append_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_append_assure\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_assure_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_assure_nulless.3
new file mode 100644 (file)
index 0000000..dd9a92f
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_string_dynamic_append_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_append_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_append_assure_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_append_nulless.3
new file mode 100644 (file)
index 0000000..5476a33
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_string_dynamic_append_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_append_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_append_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mash.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mash.3
new file mode 100644 (file)
index 0000000..53d6659
--- /dev/null
@@ -0,0 +1,101 @@
+.TH f_string_dynamic_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_mash\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mash_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mash_nulless.3
new file mode 100644 (file)
index 0000000..ad00169
--- /dev/null
@@ -0,0 +1,103 @@
+.TH f_string_dynamic_mash_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_mash_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_mash_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mish.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mish.3
new file mode 100644 (file)
index 0000000..7a31892
--- /dev/null
@@ -0,0 +1,101 @@
+.TH f_string_dynamic_mish "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_mish \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_mish\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mish_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_mish_nulless.3
new file mode 100644 (file)
index 0000000..c859108
--- /dev/null
@@ -0,0 +1,103 @@
+.TH f_string_dynamic_mish_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_mish_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_mish_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append.3
new file mode 100644 (file)
index 0000000..5b5d840
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_string_dynamic_partial_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_append\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination, but restricted to the given range.
+.PP
+If range.stop is on or after source.used, then source.used - 1 is used as the stopping point.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_assure.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_assure.3
new file mode 100644 (file)
index 0000000..4ace26d
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_string_dynamic_partial_append_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_append_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_append_assure\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end and restricted to the given range.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_assure_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_assure_nulless.3
new file mode 100644 (file)
index 0000000..d230f37
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_string_dynamic_partial_append_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_append_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_append_assure_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end and restricted to the given range.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_append_nulless.3
new file mode 100644 (file)
index 0000000..4d60c0e
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_string_dynamic_partial_append_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_append_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_append_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination, but restricted to the given range.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mash.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mash.3
new file mode 100644 (file)
index 0000000..f84e4d5
--- /dev/null
@@ -0,0 +1,126 @@
+.TH f_string_dynamic_partial_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_mash\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mash_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mash_nulless.3
new file mode 100644 (file)
index 0000000..1baf320
--- /dev/null
@@ -0,0 +1,128 @@
+.TH f_string_dynamic_partial_mash_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_mash_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_mash_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mish.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mish.3
new file mode 100644 (file)
index 0000000..189a241
--- /dev/null
@@ -0,0 +1,126 @@
+.TH f_string_dynamic_partial_mish "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_mish \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_mish\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mish_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_mish_nulless.3
new file mode 100644 (file)
index 0000000..5d14ec7
--- /dev/null
@@ -0,0 +1,128 @@
+.TH f_string_dynamic_partial_mish_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_mish_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_mish_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIglue\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend.3
new file mode 100644 (file)
index 0000000..aabbd4e
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_string_dynamic_partial_prepend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_prepend\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination, but restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_assure.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_assure.3
new file mode 100644 (file)
index 0000000..83f7bcc
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_string_dynamic_partial_prepend_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_prepend_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_prepend_assure\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning and restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_assure_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_assure_nulless.3
new file mode 100644 (file)
index 0000000..154e499
--- /dev/null
@@ -0,0 +1,98 @@
+.TH f_string_dynamic_partial_prepend_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_prepend_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_prepend_assure_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning and restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_partial_prepend_nulless.3
new file mode 100644 (file)
index 0000000..6787347
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_string_dynamic_partial_prepend_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_partial_prepend_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_partial_prepend_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination, but restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend.3
new file mode 100644 (file)
index 0000000..7dd390b
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_string_dynamic_prepend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_prepend\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_assure.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_assure.3
new file mode 100644 (file)
index 0000000..4c20b5b
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_string_dynamic_prepend_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_prepend_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_prepend_assure\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_assure_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_assure_nulless.3
new file mode 100644 (file)
index 0000000..d913d58
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_string_dynamic_prepend_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_prepend_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_prepend_assure_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_prepend_nulless.3
new file mode 100644 (file)
index 0000000..1b83ab2
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_string_dynamic_prepend_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_prepend_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_prepend_nulless\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line.3
new file mode 100644 (file)
index 0000000..682e308
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_string_dynamic_seek_line "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_seek_line \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_seek_line\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_back.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_back.3
new file mode 100644 (file)
index 0000000..72fd6a6
--- /dev/null
@@ -0,0 +1,89 @@
+.TH f_string_dynamic_seek_line_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_seek_line_back \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_seek_line_back\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location backward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_to.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_to.3
new file mode 100644 (file)
index 0000000..d81804f
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_string_dynamic_seek_line_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_seek_line_to \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_seek_line_to\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_to_back.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_line_to_back.3
new file mode 100644 (file)
index 0000000..67893b0
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_string_dynamic_seek_line_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_seek_line_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_seek_line_to_back\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location backward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_to.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_to.3
new file mode 100644 (file)
index 0000000..370258d
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_string_dynamic_seek_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_seek_to \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_seek_to\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_to_back.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_seek_to_back.3
new file mode 100644 (file)
index 0000000..79dd78a
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_string_dynamic_seek_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_seek_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_seek_to_back\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const        \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location backward until the character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_strip_null.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_strip_null.3
new file mode 100644 (file)
index 0000000..917ed3c
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_string_dynamic_strip_null "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_strip_null \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_strip_null\fP(
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+String all NULLs from the given string.
+.PP
+This does not resize the string. The string used length of the buffer is shrunk based on the NULLs removed.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to strip the NULLs from.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_strip_null_range.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_strip_null_range.3
new file mode 100644 (file)
index 0000000..495d8b8
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_string_dynamic_strip_null_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_strip_null_range \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_strip_null_range\fP(
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+String all NULLs from the given string within the specified range.
+.PP
+This does not resize the string. Unlike f_string_dynamic_strip_null(), this does not alter the string used length of the buffer.
+.PP
+Any found NULLs are moved to the end of the range in the buffer.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.SH PARAMETERS
+.TP
+.B range
+The given range within the buffer to strip.
+
+.TP
+.B buffer
+The string to strip the NULLs from.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_string_dynamic_strip_null()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_terminate.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_terminate.3
new file mode 100644 (file)
index 0000000..566ba61
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_string_dynamic_terminate "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_terminate \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_terminate\fP(
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Guarantee that an end of string (NULL) exists at the end of the string.
+.PP
+This is intended to be used for anything requiring NULL terminated strings. This will reallocate more space if necessary.
+.PP
+If destination size is 0, then it will be reallocated and have the NULL assigned at index 0.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if string is too large to fit into the buffer.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamic_terminate_after.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamic_terminate_after.3
new file mode 100644 (file)
index 0000000..16a22b3
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_string_dynamic_terminate_after "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamic_terminate_after \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_string_dynamic_terminate_after\fP(
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Guarantee that an end of string (NULL) exists at the end of the string.
+.PP
+This ensures that the terminating NULL not only exists but is not counted in destination.used.
+.PP
+This is intended to be used for anything requiring NULL terminated strings whose used length cannot be counted. This will reallocate more space if necessary.
+.PP
+If destination size is 0, then it will be reallocated and have the NULL assigned at index 0.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if string is too large to fit into the buffer.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_string_dynamic_append\fP(3), \fIf_string_dynamic_append_assure\fP(3), \fIf_string_dynamic_append_assure_nulless\fP(3), \fIf_string_dynamic_append_nulless\fP(3), \fIf_string_dynamic_mash\fP(3), \fIf_string_dynamic_mash_nulless\fP(3), \fIf_string_dynamic_mish\fP(3), \fIf_string_dynamic_mish_nulless\fP(3), \fIf_string_dynamic_partial_append\fP(3), \fIf_string_dynamic_partial_append_assure\fP(3), \fIf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_string_dynamic_partial_append_nulless\fP(3), \fIf_string_dynamic_partial_mash\fP(3), \fIf_string_dynamic_partial_mash_nulless\fP(3), \fIf_string_dynamic_partial_mish\fP(3), \fIf_string_dynamic_partial_mish_nulless\fP(3), \fIf_string_dynamic_partial_prepend\fP(3), \fIf_string_dynamic_partial_prepend_assure\fP(3), \fIf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_string_dynamic_prepend\fP(3), \fIf_string_dynamic_prepend_assure\fP(3), \fIf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_string_dynamic_prepend_nulless\fP(3), \fIf_string_dynamic_seek_line\fP(3), \fIf_string_dynamic_seek_line_back\fP(3), \fIf_string_dynamic_seek_line_to\fP(3), \fIf_string_dynamic_seek_line_to_back\fP(3), \fIf_string_dynamic_seek_to\fP(3), \fIf_string_dynamic_seek_to_back\fP(3), \fIf_string_dynamic_strip_null\fP(3), \fIf_string_dynamic_strip_null_range\fP(3), \fIf_string_dynamic_terminate\fP(3), \fIf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamics_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamics_append.3
new file mode 100644 (file)
index 0000000..a2d13eb
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_string_dynamics_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamics_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_string_dynamics_append\fP(
+    \fBconst f_string_dynamic_t   \fP\fIsource\fP,
+    \fBf_string_dynamics_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_string_dynamics_append\fP(3), \fIf_string_dynamics_append_all\fP(3), \fIf_string_dynamics_delete_callback\fP(3), \fIf_string_dynamics_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamics_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamics_append_all.3
new file mode 100644 (file)
index 0000000..5d63a56
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_string_dynamics_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamics_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_string_dynamics_append_all\fP(
+    \fBconst f_string_dynamics_t  \fP\fIsource\fP,
+    \fBf_string_dynamics_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source strings onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source strings to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_string_dynamics_append\fP(3), \fIf_string_dynamics_append_all\fP(3), \fIf_string_dynamics_delete_callback\fP(3), \fIf_string_dynamics_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamics_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamics_delete_callback.3
new file mode 100644 (file)
index 0000000..059e7ff
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_dynamics_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamics_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_string_dynamics_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_string_dynamics_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_string_dynamics_append\fP(3), \fIf_string_dynamics_append_all\fP(3), \fIf_string_dynamics_delete_callback\fP(3), \fIf_string_dynamics_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_string_dynamics_t\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamics_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamics_destroy_callback.3
new file mode 100644 (file)
index 0000000..80d7c92
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_dynamics_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamics_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_string_dynamics_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_string_dynamics_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_string_dynamics_append\fP(3), \fIf_string_dynamics_append_all\fP(3), \fIf_string_dynamics_delete_callback\fP(3), \fIf_string_dynamics_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_string_dynamics_t\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_append.3
new file mode 100644 (file)
index 0000000..ad7e892
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_string_dynamicss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamicss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_string_dynamicss_append\fP(
+    \fBconst f_string_dynamics_t   \fP\fIsource\fP,
+    \fBf_string_dynamicss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_string_dynamicss_append\fP(3), \fIf_string_dynamicss_append_all\fP(3), \fIf_string_dynamicss_delete_callback\fP(3), \fIf_string_dynamicss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_append_all.3
new file mode 100644 (file)
index 0000000..bc9dae3
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_string_dynamicss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamicss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_string_dynamicss_append_all\fP(
+    \fBconst f_string_dynamicss_t  \fP\fIsource\fP,
+    \fBf_string_dynamicss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source strings onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source strings to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_string_dynamicss_append\fP(3), \fIf_string_dynamicss_append_all\fP(3), \fIf_string_dynamicss_delete_callback\fP(3), \fIf_string_dynamicss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_delete_callback.3
new file mode 100644 (file)
index 0000000..c293e6d
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_dynamicss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamicss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_string_dynamicss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_string_dynamicss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_string_dynamicss_append\fP(3), \fIf_string_dynamicss_append_all\fP(3), \fIf_string_dynamicss_delete_callback\fP(3), \fIf_string_dynamicss_destroy_callback\fP(3), \fIf_string_dynamicss_t\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_dynamicss_destroy_callback.3
new file mode 100644 (file)
index 0000000..ea214d9
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_dynamicss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_dynamicss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_string_dynamicss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_string_dynamicss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_string_dynamicss_append\fP(3), \fIf_string_dynamicss_append_all\fP(3), \fIf_string_dynamicss_delete_callback\fP(3), \fIf_string_dynamicss_destroy_callback\fP(3), \fIf_string_dynamicss_t\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multis_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multis_append.3
new file mode 100644 (file)
index 0000000..244ce5e
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_string_map_multis_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multis_append \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_string_map_multis_append\fP(
+    \fBconst f_string_map_multi_t \fP\fIsource\fP,
+    \fBf_string_map_multis_t     *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source map_multi onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string map consisting of a name and multiple values.
+.PP
+value: An array of strings representing the map value.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multi_t {
+  f_string_dynamic_t  \fIkey\fP;
+  f_string_dynamics_t \fIvalue\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multis_t {
+  f_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t    \fIused\fP;
+  f_number_unsigned_t    \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_string_map_multis_append\fP(3), \fIf_string_map_multis_append_all\fP(3), \fIf_string_map_multis_delete_callback\fP(3), \fIf_string_map_multis_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multis_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multis_append_all.3
new file mode 100644 (file)
index 0000000..5ad6bd9
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_map_multis_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multis_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_string_map_multis_append_all\fP(
+    \fBconst f_string_map_multis_t \fP\fIsource\fP,
+    \fBf_string_map_multis_t      *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source map_multis onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multis_t {
+  f_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t    \fIused\fP;
+  f_number_unsigned_t    \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multis_t {
+  f_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t    \fIused\fP;
+  f_number_unsigned_t    \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_string_map_multis_append\fP(3), \fIf_string_map_multis_append_all\fP(3), \fIf_string_map_multis_delete_callback\fP(3), \fIf_string_map_multis_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multis_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multis_delete_callback.3
new file mode 100644 (file)
index 0000000..3f4b6e4
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_map_multis_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multis_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_string_map_multis_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_string_map_multis_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_string_map_multis_append\fP(3), \fIf_string_map_multis_append_all\fP(3), \fIf_string_map_multis_delete_callback\fP(3), \fIf_string_map_multis_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multis_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multis_destroy_callback.3
new file mode 100644 (file)
index 0000000..b956a6a
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_map_multis_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multis_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_string_map_multis_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_string_map_multis_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_string_map_multis_append\fP(3), \fIf_string_map_multis_append_all\fP(3), \fIf_string_map_multis_delete_callback\fP(3), \fIf_string_map_multis_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_append.3
new file mode 100644 (file)
index 0000000..091c2d0
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_map_multiss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multiss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_string_map_multiss_append\fP(
+    \fBconst f_string_map_multis_t \fP\fIsource\fP,
+    \fBf_string_map_multiss_t     *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source map_multis onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multis_t {
+  f_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t    \fIused\fP;
+  f_number_unsigned_t    \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps arrays.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multiss_t {
+  f_string_map_multis_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_string_map_multiss_append\fP(3), \fIf_string_map_multiss_append_all\fP(3), \fIf_string_map_multiss_delete_callback\fP(3), \fIf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_append_all.3
new file mode 100644 (file)
index 0000000..6574fbd
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_map_multiss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multiss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_string_map_multiss_append_all\fP(
+    \fBconst f_string_map_multiss_t \fP\fIsource\fP,
+    \fBf_string_map_multiss_t      *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source map_multiss onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps arrays.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multiss_t {
+  f_string_map_multis_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps arrays.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multiss_t {
+  f_string_map_multis_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_string_map_multiss_append\fP(3), \fIf_string_map_multiss_append_all\fP(3), \fIf_string_map_multiss_delete_callback\fP(3), \fIf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_delete_callback.3
new file mode 100644 (file)
index 0000000..b37dc38
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_map_multiss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multiss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_string_map_multiss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_string_map_multiss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_string_map_multiss_append\fP(3), \fIf_string_map_multiss_append_all\fP(3), \fIf_string_map_multiss_delete_callback\fP(3), \fIf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_map_multiss_destroy_callback.3
new file mode 100644 (file)
index 0000000..337e6b7
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_map_multiss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_map_multiss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_string_map_multiss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_string_map_multiss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_string_map_multiss_append\fP(3), \fIf_string_map_multiss_append_all\fP(3), \fIf_string_map_multiss_delete_callback\fP(3), \fIf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_maps_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_maps_append.3
new file mode 100644 (file)
index 0000000..5669826
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_string_maps_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_maps_append \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_string_maps_append\fP(
+    \fBconst f_string_map_t   \fP\fIsource\fP,
+    \fBf_string_maps_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source map onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string map consisting of a key and value.
+.PP
+value: A string representing the map value.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_t {
+  f_string_dynamic_t \fIkey\fP;
+  f_string_dynamic_t \fIvalue\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_string_maps_append\fP(3), \fIf_string_maps_append_all\fP(3), \fIf_string_maps_delete_callback\fP(3), \fIf_string_maps_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_maps_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_maps_append_all.3
new file mode 100644 (file)
index 0000000..ba5cc54
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_maps_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_maps_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_string_maps_append_all\fP(
+    \fBconst f_string_maps_t  \fP\fIsource\fP,
+    \fBf_string_maps_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source maps onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_string_maps_append\fP(3), \fIf_string_maps_append_all\fP(3), \fIf_string_maps_delete_callback\fP(3), \fIf_string_maps_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_maps_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_maps_delete_callback.3
new file mode 100644 (file)
index 0000000..fe594d3
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_maps_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_maps_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_string_maps_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_string_maps_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_string_maps_append\fP(3), \fIf_string_maps_append_all\fP(3), \fIf_string_maps_delete_callback\fP(3), \fIf_string_maps_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_maps_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_maps_destroy_callback.3
new file mode 100644 (file)
index 0000000..8dac5bf
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_maps_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_maps_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_string_maps_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_string_maps_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_string_maps_append\fP(3), \fIf_string_maps_append_all\fP(3), \fIf_string_maps_delete_callback\fP(3), \fIf_string_maps_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mapss_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_mapss_append.3
new file mode 100644 (file)
index 0000000..88b1562
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_mapss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mapss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_string_mapss_append\fP(
+    \fBconst f_string_maps_t   \fP\fIsource\fP,
+    \fBf_string_mapss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source maps onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source mapss to append.
+
+.TP
+.B destination
+The destination mapss the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_mapss_t {
+  f_string_maps_t    *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_string_mapss_append\fP(3), \fIf_string_mapss_append_all\fP(3), \fIf_string_mapss_delete_callback\fP(3), \fIf_string_mapss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mapss_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_mapss_append_all.3
new file mode 100644 (file)
index 0000000..923346c
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_mapss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mapss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_string_mapss_append_all\fP(
+    \fBconst f_string_mapss_t  \fP\fIsource\fP,
+    \fBf_string_mapss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source mapss onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source mapss to append.
+
+.TP
+.B destination
+The destination mapss the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_mapss_t {
+  f_string_maps_t    *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_mapss_t {
+  f_string_maps_t    *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_string_mapss_append\fP(3), \fIf_string_mapss_append_all\fP(3), \fIf_string_mapss_delete_callback\fP(3), \fIf_string_mapss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mapss_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_mapss_delete_callback.3
new file mode 100644 (file)
index 0000000..2c9faad
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_mapss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mapss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_string_mapss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_string_mapss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_string_mapss_append\fP(3), \fIf_string_mapss_append_all\fP(3), \fIf_string_mapss_delete_callback\fP(3), \fIf_string_mapss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mapss_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_mapss_destroy_callback.3
new file mode 100644 (file)
index 0000000..6652497
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_mapss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mapss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_string_mapss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_string_mapss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_string_mapss_append\fP(3), \fIf_string_mapss_append_all\fP(3), \fIf_string_mapss_delete_callback\fP(3), \fIf_string_mapss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mash.3 b/level_0/f_string/data/documentation/man/man3/f_string_mash.3
new file mode 100644 (file)
index 0000000..353249a
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_string_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_mash\fP(
+    \fBconst f_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t \fP\fIglue_length\fP,
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mash_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_mash_nulless.3
new file mode 100644 (file)
index 0000000..ebef2e4
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_string_mash_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mash_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_mash_nulless\fP(
+    \fBconst f_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t \fP\fIglue_length\fP,
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mish.3 b/level_0/f_string/data/documentation/man/man3/f_string_mish.3
new file mode 100644 (file)
index 0000000..77930b1
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_string_mish "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mish \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_mish\fP(
+    \fBconst f_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t \fP\fIglue_length\fP,
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_mish_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_mish_nulless.3
new file mode 100644 (file)
index 0000000..813052b
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_string_mish_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_mish_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_mish_nulless\fP(
+    \fBconst f_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t \fP\fIglue_length\fP,
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_prepend.3 b/level_0/f_string/data/documentation/man/man3/f_string_prepend.3
new file mode 100644 (file)
index 0000000..e38d9ef
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_string_prepend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_prepend\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_prepend_assure.3 b/level_0/f_string/data/documentation/man/man3/f_string_prepend_assure.3
new file mode 100644 (file)
index 0000000..11fca82
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_string_prepend_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_prepend_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_prepend_assure\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_prepend_assure_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_prepend_assure_nulless.3
new file mode 100644 (file)
index 0000000..9c4c47c
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_string_prepend_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_prepend_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_prepend_assure_nulless\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination. Skips over NULL characters from source when prepending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_prepend_nulless.3 b/level_0/f_string/data/documentation/man/man3/f_string_prepend_nulless.3
new file mode 100644 (file)
index 0000000..9f83e91
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_string_prepend_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_prepend_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_prepend_nulless\fP(
+    \fBconst f_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination, but only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination. Skips over NULL characters from source when prepending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_seek_line.3 b/level_0/f_string/data/documentation/man/man3/f_string_seek_line.3
new file mode 100644 (file)
index 0000000..6896f78
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_string_seek_line "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_seek_line \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_seek_line\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at end of range. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_seek_line_back.3 b/level_0/f_string/data/documentation/man/man3/f_string_seek_line_back.3
new file mode 100644 (file)
index 0000000..f453192
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_string_seek_line_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_seek_line_back \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_seek_line_back\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location backward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at end of range. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_seek_line_to.3 b/level_0/f_string/data/documentation/man/man3/f_string_seek_line_to.3
new file mode 100644 (file)
index 0000000..fe69305
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_string_seek_line_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_seek_line_to \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_seek_line_to\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_seek_line_to_back.3 b/level_0/f_string/data/documentation/man/man3/f_string_seek_line_to_back.3
new file mode 100644 (file)
index 0000000..7c631ce
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_string_seek_line_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_seek_line_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_seek_line_to_back\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location backward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decrementd by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_seek_to.3 b/level_0/f_string/data/documentation/man/man3/f_string_seek_to.3
new file mode 100644 (file)
index 0000000..326b652
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_string_seek_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_seek_to \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_seek_to\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the character (1-byte wide) is reached.
+.PP
+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.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_seek_to_back.3 b/level_0/f_string/data/documentation/man/man3/f_string_seek_to_back.3
new file mode 100644 (file)
index 0000000..e00ade8
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_string_seek_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_seek_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_string_seek_to_back\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location backward until the character (1-byte wide) is reached.
+.PP
+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.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_string_append\fP(3), \fIf_string_append_assure\fP(3), \fIf_string_append_assure_nulless\fP(3), \fIf_string_append_nulless\fP(3), \fIf_string_mash\fP(3), \fIf_string_mash_nulless\fP(3), \fIf_string_mish\fP(3), \fIf_string_mish_nulless\fP(3), \fIf_string_prepend\fP(3), \fIf_string_prepend_assure\fP(3), \fIf_string_prepend_assure_nulless\fP(3), \fIf_string_prepend_nulless\fP(3), \fIf_string_seek_line\fP(3), \fIf_string_seek_line_back\fP(3), \fIf_string_seek_line_to\fP(3), \fIf_string_seek_line_to_back\fP(3), \fIf_string_seek_to\fP(3), \fIf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_triples_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_triples_append.3
new file mode 100644 (file)
index 0000000..4cac006
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_triples_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_triples_append \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_string_triples_append\fP(
+    \fBconst f_string_triple_t   \fP\fIsource\fP,
+    \fBf_string_triples_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source triples onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source triple to append.
+
+.TP
+.B destination
+The destination triples the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string triple consisting of a set of three strings.
+.PP
+c: A string representing the third string in the triple.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triple_t {
+  f_string_dynamic_t \fIa\fP;
+  f_string_dynamic_t \fIb\fP;
+  f_string_dynamic_t \fIc\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triples_t {
+  f_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_string_triples_append\fP(3), \fIf_string_triples_append_all\fP(3), \fIf_string_triples_delete_callback\fP(3), \fIf_string_triples_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_triples_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_triples_append_all.3
new file mode 100644 (file)
index 0000000..e8eeaf4
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_triples_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_triples_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_string_triples_append_all\fP(
+    \fBconst f_string_triples_t  \fP\fIsource\fP,
+    \fBf_string_triples_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source triples onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source triples to append.
+
+.TP
+.B destination
+The destination triples the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triples_t {
+  f_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triples_t {
+  f_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_string_triples_append\fP(3), \fIf_string_triples_append_all\fP(3), \fIf_string_triples_delete_callback\fP(3), \fIf_string_triples_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_triples_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_triples_delete_callback.3
new file mode 100644 (file)
index 0000000..793b9a1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_triples_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_triples_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_string_triples_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_string_triples_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_string_triples_append\fP(3), \fIf_string_triples_append_all\fP(3), \fIf_string_triples_delete_callback\fP(3), \fIf_string_triples_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_triples_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_triples_destroy_callback.3
new file mode 100644 (file)
index 0000000..eec9714
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_triples_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_triples_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_string_triples_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_string_triples_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_string_triples_append\fP(3), \fIf_string_triples_append_all\fP(3), \fIf_string_triples_delete_callback\fP(3), \fIf_string_triples_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_tripless_append.3 b/level_0/f_string/data/documentation/man/man3/f_string_tripless_append.3
new file mode 100644 (file)
index 0000000..ae58010
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_tripless_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_tripless_append \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_string_tripless_append\fP(
+    \fBconst f_string_triples_t   \fP\fIsource\fP,
+    \fBf_string_tripless_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source triples onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source triples to append.
+
+.TP
+.B destination
+The destination tripless the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triples_t {
+  f_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string tripless.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_tripless_t {
+  f_string_triples_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_string_tripless_append\fP(3), \fIf_string_tripless_append_all\fP(3), \fIf_string_tripless_delete_callback\fP(3), \fIf_string_tripless_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_tripless_append_all.3 b/level_0/f_string/data/documentation/man/man3/f_string_tripless_append_all.3
new file mode 100644 (file)
index 0000000..fe32593
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_string_tripless_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_tripless_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_string_tripless_append_all\fP(
+    \fBconst f_string_tripless_t  \fP\fIsource\fP,
+    \fBf_string_tripless_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source tripless onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source tripless to append.
+
+.TP
+.B destination
+The destination tripless the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string tripless.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_tripless_t {
+  f_string_triples_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string tripless.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_tripless_t {
+  f_string_triples_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_string_tripless_append\fP(3), \fIf_string_tripless_append_all\fP(3), \fIf_string_tripless_delete_callback\fP(3), \fIf_string_tripless_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_tripless_delete_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_tripless_delete_callback.3
new file mode 100644 (file)
index 0000000..8cdde32
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_tripless_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_tripless_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_string_tripless_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_string_tripless_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_string_tripless_append\fP(3), \fIf_string_tripless_append_all\fP(3), \fIf_string_tripless_delete_callback\fP(3), \fIf_string_tripless_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_string/data/documentation/man/man3/f_string_tripless_destroy_callback.3 b/level_0/f_string/data/documentation/man/man3/f_string_tripless_destroy_callback.3
new file mode 100644 (file)
index 0000000..735fa45
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_string_tripless_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_string_tripless_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_string_tripless_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_string_tripless_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_string_tripless_append\fP(3), \fIf_string_tripless_append_all\fP(3), \fIf_string_tripless_delete_callback\fP(3), \fIf_string_tripless_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_at_fork.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_at_fork.3
new file mode 100644 (file)
index 0000000..3bada3a
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_at_fork "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_at_fork \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_at_fork\fP(
+    \fBconst f_void_call_t \fP\fIbefore\fP,
+    \fBconst f_void_call_t \fP\fIafter_parent\fP,
+    \fBconst f_void_call_t \fP\fIafter_child\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform a fork operation.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_memory_not (with error bit) if out of memory.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B before
+The function to call before forking.
+
+.TP
+.B after_parent
+The function called after forking, for the parent process.
+
+.TP
+.B after_child
+The function called after forking, for the child process.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_atfork()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_affinity_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_affinity_get.3
new file mode 100644 (file)
index 0000000..5c05a6d
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_attribute_affinity_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_affinity_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_affinity_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBconst size_t               \fP\fIaffinity_size\fP,
+    \fBcpu_set_t *const           \fP\fIaffinity_set\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the affinity state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B affinity_size
+The size of the affinity_set.
+
+.TP
+.B affinity_set
+The assigned affinity information.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getaffinity_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_affinity_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_affinity_set.3
new file mode 100644 (file)
index 0000000..cde2a88
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_attribute_affinity_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_affinity_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_affinity_set\fP(
+    \fBconst size_t                \fP\fIaffinity_size\fP,
+    \fBconst cpu_set_t            *\fP\fIaffinity_set\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the affinity state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B affinity_size
+The size of the affinity_set.
+
+.TP
+.B affinity_set
+The affinity information to assign.
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setaffinity_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_concurrency_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_concurrency_get.3
new file mode 100644 (file)
index 0000000..16db38d
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_attribute_concurrency_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_concurrency_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_concurrency_get\fP(
+    \fBint *const \fP\fIlevel\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the level of concurrency.
+.PP
+A level of 0 designates the system to automatically choose concurrency level. Any non-zero level is considered a hint and will be followed at the systems discretion.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if the new level would cause the system to exceed available resources.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B level
+The concurrency level.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_getconcurrency()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_concurrency_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_concurrency_set.3
new file mode 100644 (file)
index 0000000..37a6df1
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_attribute_concurrency_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_concurrency_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_concurrency_set\fP(
+    \fBconst int \fP\fIlevel\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the level of concurrency.
+.PP
+A level of 0 designates the system to automatically choose concurrency level. Any non-zero level is considered a hint and will be followed at the systems discretion.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B level
+The concurrency level.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_setconcurrency()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_create.3
new file mode 100644 (file)
index 0000000..0f3539e
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_attribute_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_create \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_create\fP(
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create (initialize) a thread attribute structure.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_memory_not (with error bit) if out of memory.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The attribute to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_default_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_default_get.3
new file mode 100644 (file)
index 0000000..733b1f3
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_attribute_default_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_default_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_default_get\fP(
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the default thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_getattr_default_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_default_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_default_set.3
new file mode 100644 (file)
index 0000000..ade96ed
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_attribute_default_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_default_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_default_set\fP(
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the default thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_setattr_default_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_delete.3
new file mode 100644 (file)
index 0000000..70950fe
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_attribute_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_delete\fP(
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread attribute structure.
+.PP
+On successfully delete, the pointer address is set to 0.
+.PP
+The pthread_attr_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_detach_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_detach_get.3
new file mode 100644 (file)
index 0000000..c85cd22
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_detach_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_detach_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_detach_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBint *const                 \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the detached state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B state
+The currently assigned state.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getdetachstate()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_detach_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_detach_set.3
new file mode 100644 (file)
index 0000000..cd7876a
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_detach_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_detach_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_detach_set\fP(
+    \fBconst int                   \fP\fIstate\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the detached state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B state
+The state to assign (such as PTHREAD_CREATE_DETACHED or PTHREAD_CREATE_JOINABLE).
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setdetachstate()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_guard_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_guard_get.3
new file mode 100644 (file)
index 0000000..7c8e84e
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_guard_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_guard_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_guard_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBsize_t *const              \fP\fIguard\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the guard size of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B guard
+The currently assigned guard size.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getguardsize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_guard_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_guard_set.3
new file mode 100644 (file)
index 0000000..8fc303d
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_guard_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_guard_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_guard_set\fP(
+    \fBconst size_t                \fP\fIguard\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the guard size of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B guard
+The guard size to assign.
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setguardsize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_inherit_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_inherit_get.3
new file mode 100644 (file)
index 0000000..c4bb061
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scheduler_inherit_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scheduler_inherit_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scheduler_inherit_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBint *const                 \fP\fIinherit\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the scheduler inherit state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B inherit
+The currently assigned scheduler inherit state.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getinheritsched()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_inherit_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_inherit_set.3
new file mode 100644 (file)
index 0000000..8a250c0
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scheduler_inherit_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scheduler_inherit_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scheduler_inherit_set\fP(
+    \fBconst int                   \fP\fIinherit\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the scheduler inherit state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B inherit
+The inherit state of the scheduler (such as PTHREAD_INHERIT_SCHED or PTHREAD_EXPLICIT_SCHED).
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setinheritsched()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_parameter_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_parameter_get.3
new file mode 100644 (file)
index 0000000..401a7c2
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scheduler_parameter_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scheduler_parameter_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scheduler_parameter_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBstruct sched_param *const  \fP\fIparameter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the scheduler parameter state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B parameter
+The currently assigned scheduler parameters.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getschedparam()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_parameter_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_parameter_set.3
new file mode 100644 (file)
index 0000000..e8794db
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scheduler_parameter_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scheduler_parameter_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scheduler_parameter_set\fP(
+    \fBconst struct sched_param    \fP\fIparameter\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the scheduler parameter state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B parameter
+The parameters of the scheduler.
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setschedparam()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_policy_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_policy_get.3
new file mode 100644 (file)
index 0000000..b47f43a
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scheduler_policy_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scheduler_policy_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scheduler_policy_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBint *const                 \fP\fIpolicy\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the scheduler policy state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B policy
+The currently assigned scheduler policy state.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getschedpolicy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_policy_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scheduler_policy_set.3
new file mode 100644 (file)
index 0000000..e32f69a
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scheduler_policy_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scheduler_policy_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scheduler_policy_set\fP(
+    \fBconst int                   \fP\fIpolicy\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the scheduler policy state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B policy
+The policy state of the scheduler (such as SCHED_FIFO, SCHED_RR, or SCHED_OTHER).
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setschedpolicy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scope_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scope_get.3
new file mode 100644 (file)
index 0000000..2ffb01c
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scope_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scope_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scope_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBint *const                 \fP\fIscope\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the scheduler scope state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B scope
+The currently assigned scheduler scope state.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getscope()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scope_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_scope_set.3
new file mode 100644 (file)
index 0000000..60bbaed
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_scope_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_scope_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_scope_set\fP(
+    \fBconst int                   \fP\fIscope\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the scheduler scope state of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the scope is not supported by the current OS (such as Linux not supporting PTHREAD_SCOPE_PROCESS).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B scope
+The scope state of the scheduler (such as PTHREAD_SCOPE_SYSTEM or PTHREAD_SCOPE_PROCESS).
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setscope()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_get.3
new file mode 100644 (file)
index 0000000..416e8be
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_attribute_stack_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_stack_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_stack_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBsize_t *const              \fP\fIstack_size\fP,
+    \fBvoid **const               \fP\fIstack\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the stack of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) if the caller cannot both read and write to the stack address. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B stack_size
+The size of the stack.
+
+.TP
+.B stack
+The assigned stack.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getstack()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_set.3
new file mode 100644 (file)
index 0000000..621bd29
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_thread_attribute_stack_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_stack_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_stack_set\fP(
+    \fBconst size_t                \fP\fIstack_size\fP,
+    \fBvoid *const                 \fP\fIstack\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the stack of the thread attribute.
+.PP
+F_access_denied (with error bit) if the caller cannot both read and write to the stack address. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stack_size
+The size of the stack.
+
+.TP
+.B stack
+The stack to assign.
+
+.TP
+.B attribute
+The thread attributes to update Must not be NULL..
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setstack()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_size_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_size_get.3
new file mode 100644 (file)
index 0000000..3dc9a35
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_stack_size_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_stack_size_get \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_stack_size_get\fP(
+    \fBconst f_thread_attribute_t \fP\fIattribute\fP,
+    \fBsize_t *const              \fP\fIstack_size\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the stack size of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread attributes to process.
+
+.TP
+.B stack_size
+The assigned size of the stack.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_getstacksize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_size_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attribute_stack_size_set.3
new file mode 100644 (file)
index 0000000..e8f2e5b
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_attribute_stack_size_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attribute_stack_size_set \-
+.SH SYNOPSIS
+.nf
+.B #include <attribute.h>
+.sp
+\fBf_status_t f_thread_attribute_stack_size_set\fP(
+    \fBconst size_t                \fP\fIstack_size\fP,
+    \fBf_thread_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the stack size of the thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B stack_size
+The size of the stack.
+
+.TP
+.B attribute
+The thread attributes to update.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattribute.h\fP(3), \fIf_thread_attribute_affinity_get\fP(3), \fIf_thread_attribute_affinity_set\fP(3), \fIf_thread_attribute_concurrency_get\fP(3), \fIf_thread_attribute_concurrency_set\fP(3), \fIf_thread_attribute_create\fP(3), \fIf_thread_attribute_default_get\fP(3), \fIf_thread_attribute_default_set\fP(3), \fIf_thread_attribute_delete\fP(3), \fIf_thread_attribute_detach_get\fP(3), \fIf_thread_attribute_detach_set\fP(3), \fIf_thread_attribute_guard_get\fP(3), \fIf_thread_attribute_guard_set\fP(3), \fIf_thread_attribute_scheduler_inherit_get\fP(3), \fIf_thread_attribute_scheduler_inherit_set\fP(3), \fIf_thread_attribute_scheduler_parameter_get\fP(3), \fIf_thread_attribute_scheduler_parameter_set\fP(3), \fIf_thread_attribute_scheduler_policy_get\fP(3), \fIf_thread_attribute_scheduler_policy_set\fP(3), \fIf_thread_attribute_scope_get\fP(3), \fIf_thread_attribute_scope_set\fP(3), \fIf_thread_attribute_stack_get\fP(3), \fIf_thread_attribute_stack_set\fP(3), \fIf_thread_attribute_stack_size_get\fP(3), \fIf_thread_attribute_stack_size_set\fP(3), \fIpthread_attr_setstacksize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attributes_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attributes_delete_callback.3
new file mode 100644 (file)
index 0000000..8671212
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_attributes_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attributes_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <attributes.h>
+.sp
+\fBf_status_t f_thread_attributes_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattributes.h\fP(3), \fIf_thread_attributes_delete_callback\fP(3), \fIf_thread_attributess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attributes_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attributes_destroy_callback.3
new file mode 100644 (file)
index 0000000..5053e66
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_attributes_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attributes_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <attributess.h>
+.sp
+\fBf_status_t f_thread_attributes_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattributess.h\fP(3), \fIf_thread_attributes_destroy_callback\fP(3), \fIf_thread_attributess_delete_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attributess_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attributess_delete_callback.3
new file mode 100644 (file)
index 0000000..c823527
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_attributess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attributess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <attributess.h>
+.sp
+\fBf_status_t f_thread_attributess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattributess.h\fP(3), \fIf_thread_attributes_destroy_callback\fP(3), \fIf_thread_attributess_delete_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_attributess_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_attributess_destroy_callback.3
new file mode 100644 (file)
index 0000000..2c58867
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_attributess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_attributess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <attributes.h>
+.sp
+\fBf_status_t f_thread_attributess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIattributes.h\fP(3), \fIf_thread_attributes_delete_callback\fP(3), \fIf_thread_attributess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_create.3
new file mode 100644 (file)
index 0000000..7b55659
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_barrier_attribute_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attribute_create \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attribute.h>
+.sp
+\fBf_status_t f_thread_barrier_attribute_create\fP(
+    \fBf_thread_barrier_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create (initialize) a thread barrier attribute structure.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_memory_not (with error bit) if out of memory.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The attribute to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attribute.h\fP(3), \fIf_thread_barrier_attribute_create\fP(3), \fIf_thread_barrier_attribute_delete\fP(3), \fIf_thread_barrier_attribute_shared_get\fP(3), \fIf_thread_barrier_attribute_shared_set\fP(3), \fIpthread_barrierattr_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_delete.3
new file mode 100644 (file)
index 0000000..57c2445
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_barrier_attribute_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attribute_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attribute.h>
+.sp
+\fBf_status_t f_thread_barrier_attribute_delete\fP(
+    \fBf_thread_barrier_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread barrier attribute structure.
+.PP
+On successfully delete, the pointer address is set to 0.
+.PP
+The pthread_barrierattr_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread barrier_attributes to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attribute.h\fP(3), \fIf_thread_barrier_attribute_create\fP(3), \fIf_thread_barrier_attribute_delete\fP(3), \fIf_thread_barrier_attribute_shared_get\fP(3), \fIf_thread_barrier_attribute_shared_set\fP(3), \fIpthread_barrierattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_shared_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_shared_get.3
new file mode 100644 (file)
index 0000000..07557fe
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_barrier_attribute_shared_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attribute_shared_get \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attribute.h>
+.sp
+\fBf_status_t f_thread_barrier_attribute_shared_get\fP(
+    \fBconst f_thread_barrier_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                                \fP\fIshared\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the barrier process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The barrier thread attribute.
+
+.TP
+.B shared
+The process shared attribute value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attribute.h\fP(3), \fIf_thread_barrier_attribute_create\fP(3), \fIf_thread_barrier_attribute_delete\fP(3), \fIf_thread_barrier_attribute_shared_get\fP(3), \fIf_thread_barrier_attribute_shared_set\fP(3), \fIpthread_barrierattr_getpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_shared_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attribute_shared_set.3
new file mode 100644 (file)
index 0000000..9c224df
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_barrier_attribute_shared_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attribute_shared_set \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attribute.h>
+.sp
+\fBf_status_t f_thread_barrier_attribute_shared_set\fP(
+    \fBconst int                           \fP\fIshared\fP,
+    \fBf_thread_barrier_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the barrier process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B shared
+The process shared attribute value.
+
+.TP
+.B attribute
+The barrier thread attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attribute.h\fP(3), \fIf_thread_barrier_attribute_create\fP(3), \fIf_thread_barrier_attribute_delete\fP(3), \fIf_thread_barrier_attribute_shared_get\fP(3), \fIf_thread_barrier_attribute_shared_set\fP(3), \fIpthread_barrierattr_setpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributes_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributes_delete_callback.3
new file mode 100644 (file)
index 0000000..4a17884
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barrier_attributes_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attributes_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attributes.h>
+.sp
+\fBf_status_t f_thread_barrier_attributes_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_barrier_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attributes.h\fP(3), \fIf_thread_barrier_attributes_delete_callback\fP(3), \fIf_thread_barrier_attributes_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributes_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributes_destroy_callback.3
new file mode 100644 (file)
index 0000000..37134c1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barrier_attributes_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attributes_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attributes.h>
+.sp
+\fBf_status_t f_thread_barrier_attributes_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_barrier_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attributes.h\fP(3), \fIf_thread_barrier_attributes_delete_callback\fP(3), \fIf_thread_barrier_attributes_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributess_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributess_delete_callback.3
new file mode 100644 (file)
index 0000000..7b6f4f9
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barrier_attributess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attributess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attributess.h>
+.sp
+\fBf_status_t f_thread_barrier_attributess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_barrier_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attributess.h\fP(3), \fIf_thread_barrier_attributess_delete_callback\fP(3), \fIf_thread_barrier_attributess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributess_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_attributess_destroy_callback.3
new file mode 100644 (file)
index 0000000..3ed78ed
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barrier_attributess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_attributess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_attributess.h>
+.sp
+\fBf_status_t f_thread_barrier_attributess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_barrier_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_attributess.h\fP(3), \fIf_thread_barrier_attributess_delete_callback\fP(3), \fIf_thread_barrier_attributess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_create.3
new file mode 100644 (file)
index 0000000..e9cfcd0
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_barrier_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_create \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier.h>
+.sp
+\fBf_status_t f_thread_barrier_create\fP(
+    \fBconst unsigned int                  \fP\fIcount\fP,
+    \fBf_thread_barrier_attribute_t *const \fP\fIattribute\fP,
+    \fBf_thread_barrier_t *const           \fP\fIbarrier\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create (initialize) a thread barrier structure.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if barrier is already in use (a re-initialization attempt). F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if necessary resouces to perform create are unavailable.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B count
+The number of threads that must call the barrier wait function before any can successfully return.
+
+.TP
+.B attribute
+(optional) The default attributes to initialize the barrier to. Set to NULL to not use (in which case the default barrier attributes are used).
+
+.TP
+.B barrier
+The barrier to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier.h\fP(3), \fIf_thread_barrier_create\fP(3), \fIf_thread_barrier_delete\fP(3), \fIf_thread_barrier_wait\fP(3), \fIpthread_barrier_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_delete.3
new file mode 100644 (file)
index 0000000..9db407e
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_barrier_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier.h>
+.sp
+\fBf_status_t f_thread_barrier_delete\fP(
+    \fBf_thread_barrier_t *const \fP\fIbarrier\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread barrier structure.
+.PP
+On successfully delete, the pointer address is set to 0.
+.PP
+The pthread_barrier_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B barrier
+The thread barriers to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier.h\fP(3), \fIf_thread_barrier_create\fP(3), \fIf_thread_barrier_delete\fP(3), \fIf_thread_barrier_wait\fP(3), \fIpthread_barrier_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_full_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_full_delete.3
new file mode 100644 (file)
index 0000000..abbab51
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_thread_barrier_full_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_full_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_full.h>
+.sp
+\fBf_status_t f_thread_barrier_full_delete\fP(
+    \fBf_thread_barrier_full_t *const \fP\fIfull\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread barrier full structure.
+.PP
+On successfully delete, the pointer address is set to 0.
+.PP
+The pthread_barrier_destroy() and pthread_barrierattr_destroy() functions have no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+When F_barrier (with error bit) is returned, then pthread_barrierattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy when calling pthread_barrier_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_barrier_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_barrierattr_destroy(). F_barrier (with error bit) on any error when calling pthread_barrier_destroy().
+.SH PARAMETERS
+.TP
+.B full
+The thread barrier_fulls to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure of the barrier and its associated attribute.
+.PP
+attribute: The associated attribute.
+.sp
+.RS
+.nf
+\fB
+struct f_thread_barrier_full_t {
+  f_thread_barrier_t           \fIbarrier\fP;
+  f_thread_barrier_attribute_t \fIattribute\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_full.h\fP(3), \fIf_thread_barrier_full_delete\fP(3), \fIpthread_barrier_destroy()\fP, \fIpthread_barrierattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fulls_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fulls_delete_callback.3
new file mode 100644 (file)
index 0000000..8fab1e7
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_barrier_fulls_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_fulls_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_fulls.h>
+.sp
+\fBf_status_t f_thread_barrier_fulls_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_barrier_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_barrier (with error bit) is returned, then pthread_barrierattr_destroy() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy when calling pthread_barrier_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_barrier_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_barrierattr_destroy(). F_barrier (with error bit) on any error when calling pthread_barrier_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_fulls.h\fP(3), \fIf_thread_barrier_fulls_delete_callback\fP(3), \fIf_thread_barrier_fulls_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_barrier_destroy()\fP, \fIpthread_barrierattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fulls_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fulls_destroy_callback.3
new file mode 100644 (file)
index 0000000..05bb2d9
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_barrier_fulls_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_fulls_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_fulls.h>
+.sp
+\fBf_status_t f_thread_barrier_fulls_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_barrier_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_barrier (with error bit) is returned, then pthread_barrierattr_destroy() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy when calling pthread_barrier_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_barrier_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_barrierattr_destroy(). F_barrier (with error bit) on any error when calling pthread_barrier_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_fulls.h\fP(3), \fIf_thread_barrier_fulls_delete_callback\fP(3), \fIf_thread_barrier_fulls_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_barrier_destroy()\fP, \fIpthread_barrierattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fullss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fullss_delete_callback.3
new file mode 100644 (file)
index 0000000..7195ddd
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_barrier_fullss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_fullss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_fullss.h>
+.sp
+\fBf_status_t f_thread_barrier_fullss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_barrier_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_barrier (with error bit) is returned, then pthread_barrierattr_destroy() is not called. When F_attribute or F_barrier (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy when calling pthread_barrier_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_barrier_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_barrierattr_destroy(). F_barrier (with error bit) on any error when calling pthread_barrier_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_fullss.h\fP(3), \fIf_thread_barrier_fullss_delete_callback\fP(3), \fIf_thread_barrier_fullss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_barrier_destroy()\fP, \fIpthread_barrierattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fullss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_fullss_destroy_callback.3
new file mode 100644 (file)
index 0000000..2958fc2
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_barrier_fullss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_fullss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier_fullss.h>
+.sp
+\fBf_status_t f_thread_barrier_fullss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_barrier_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_barrier (with error bit) is returned, then pthread_barrierattr_destroy() is not called. When F_attribute or F_barrier (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy when calling pthread_barrier_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_barrier_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_barrierattr_destroy(). F_barrier (with error bit) on any error when calling pthread_barrier_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier_fullss.h\fP(3), \fIf_thread_barrier_fullss_delete_callback\fP(3), \fIf_thread_barrier_fullss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_barrier_destroy()\fP, \fIpthread_barrierattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_wait.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrier_wait.3
new file mode 100644 (file)
index 0000000..681798d
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_barrier_wait "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrier_wait \-
+.SH SYNOPSIS
+.nf
+.B #include <barrier.h>
+.sp
+\fBf_status_t f_thread_barrier_wait\fP(
+    \fBf_thread_barrier_t *const \fP\fIbarrier\fP,
+    \fBint *const                \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Wait on a barrier, effectively synchronizing multiple threads with some barrier.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B barrier
+The barrier to wait on.
+
+.TP
+.B result
+(optional) the return value, which will be PTHREAD_BARRIER_SERIAL_THREAD for one thread and 0 for others.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrier.h\fP(3), \fIf_thread_barrier_create\fP(3), \fIf_thread_barrier_delete\fP(3), \fIf_thread_barrier_wait\fP(3), \fIpthread_barrier_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barriers_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barriers_delete_callback.3
new file mode 100644 (file)
index 0000000..724c4a4
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barriers_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barriers_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barriers.h>
+.sp
+\fBf_status_t f_thread_barriers_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_barriers_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarriers.h\fP(3), \fIf_thread_barriers_delete_callback\fP(3), \fIf_thread_barriers_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIpthread_barrier_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barriers_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barriers_destroy_callback.3
new file mode 100644 (file)
index 0000000..10ecf80
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barriers_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barriers_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barriers.h>
+.sp
+\fBf_status_t f_thread_barriers_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_barriers_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarriers.h\fP(3), \fIf_thread_barriers_delete_callback\fP(3), \fIf_thread_barriers_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIpthread_barrier_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrierss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrierss_delete_callback.3
new file mode 100644 (file)
index 0000000..000f398
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barrierss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrierss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrierss.h>
+.sp
+\fBf_status_t f_thread_barrierss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_barrierss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrierss.h\fP(3), \fIf_thread_barrierss_delete_callback\fP(3), \fIf_thread_barrierss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIpthread_barrier_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_barrierss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_barrierss_destroy_callback.3
new file mode 100644 (file)
index 0000000..c5fef1a
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_barrierss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_barrierss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <barrierss.h>
+.sp
+\fBf_status_t f_thread_barrierss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_barrierss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a barrier is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbarrierss.h\fP(3), \fIf_thread_barrierss_delete_callback\fP(3), \fIf_thread_barrierss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIpthread_barrier_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_caller.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_caller.3
new file mode 100644 (file)
index 0000000..31b23ac
--- /dev/null
@@ -0,0 +1,29 @@
+.TH f_thread_caller "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_caller \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_thread_id_t f_thread_caller\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the ID of the calling thread.
+.SH RETURN VALUE
+.PP
+ID of the calling thread
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_self()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_cancel.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_cancel.3
new file mode 100644 (file)
index 0000000..ace9caf
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_thread_cancel "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_cancel \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_cancel\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Cancel a thread.
+.PP
+F_found_not (with error bit) if no thread by the given ID was found.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The thread to cancel.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_cancel()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_cancel_state_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_cancel_state_set.3
new file mode 100644 (file)
index 0000000..998021c
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_cancel_state_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_cancel_state_set \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_cancel_state_set\fP(
+    \fBconst int  \fP\fIstate\fP,
+    \fBint *const \fP\fIprevious\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Assign a cancellation state.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B state
+The cancellation state to assign.
+
+.TP
+.B previous
+(optional) The previously assigned cancellation state.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_setcancelstate()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_cancel_test.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_cancel_test.3
new file mode 100644 (file)
index 0000000..0571b99
--- /dev/null
@@ -0,0 +1,31 @@
+.TH f_thread_cancel_test "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_cancel_test \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_cancel_test\fP(
+    \fBvoid     \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Force any pending thread cancellation to be processed.
+.PP
+If there is no pending thread cancel, nothing happens. If there is a pending thread cancel, the thread cancels and this function never returns.
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_testcancel()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_cancel_type_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_cancel_type_set.3
new file mode 100644 (file)
index 0000000..9c1aa34
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_cancel_type_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_cancel_type_set \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_cancel_type_set\fP(
+    \fBconst int  \fP\fItype\fP,
+    \fBint *const \fP\fIprevious\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Assign a cancellation type.
+.PP
+Set to NULL to not use. (Note: Linux allows this to be optional/NULL but POSIX does not explicitly defined this and there may be portability issues.)
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B type
+The cancellation type to assign.
+
+.TP
+.B previous
+(optional) The previously assigned cancellation type.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_setcanceltype()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_clock_get_id.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_clock_get_id.3
new file mode 100644 (file)
index 0000000..d187192
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_clock_get_id "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_clock_get_id \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_clock_get_id\fP(
+    \fBconst f_thread_id_t \fP\fIid_thread\fP,
+    \fBclockid_t *const    \fP\fIid_clock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the clock ID for the given thread.
+.PP
+Must not be NULL.
+.PP
+F_found_not (with error bit) if no thread by the given ID was found. F_support_not (with error bit) if per-CPU clocks are not supported by the OS.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id_thread
+The ID of the thread to use.
+
+.TP
+.B id_clock
+The retrieved clock ID.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_getcpuclockid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_compare.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_compare.3
new file mode 100644 (file)
index 0000000..cbf99b7
--- /dev/null
@@ -0,0 +1,32 @@
+.TH f_thread_compare "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_compare \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_compare\fP(
+    \fBconst f_thread_id_t \fP\fIid1\fP,
+    \fBconst f_thread_id_t \fP\fIid2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Compare two different thread IDs.
+.PP
+POSIX designates that the thread id (pthread_t) to be loosely defined and can be anything from an integer to a structure. For portability purposes, calling pthread_equal() is the only safe way to compare two thread ids.
+.SH RETURN VALUE
+.PP
+F_equal_to if the two thread IDs are the same. F_equal_to_not if the two thread IDs are different.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_equal()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_clock_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_clock_get.3
new file mode 100644 (file)
index 0000000..e3f6e96
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_condition_attribute_clock_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attribute_clock_get \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attribute.h>
+.sp
+\fBf_status_t f_thread_condition_attribute_clock_get\fP(
+    \fBconst f_thread_condition_attribute_t *const \fP\fIattribute\fP,
+    \fBclockid_t *const                            \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the clock selection thread condition attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread condition attribute.
+
+.TP
+.B id
+The clock ID.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attribute.h\fP(3), \fIf_thread_condition_attribute_clock_get\fP(3), \fIf_thread_condition_attribute_clock_set\fP(3), \fIf_thread_condition_attribute_create\fP(3), \fIf_thread_condition_attribute_delete\fP(3), \fIf_thread_condition_attribute_shared_get\fP(3), \fIf_thread_condition_attribute_shared_set\fP(3), \fIpthread_condattr_getclock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_clock_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_clock_set.3
new file mode 100644 (file)
index 0000000..5f28f8c
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_condition_attribute_clock_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attribute_clock_set \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attribute.h>
+.sp
+\fBf_status_t f_thread_condition_attribute_clock_set\fP(
+    \fBconst clockid_t                       \fP\fIid\fP,
+    \fBf_thread_condition_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the clock selection thread condition attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The clock ID.
+
+.TP
+.B attribute
+The thread condition attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attribute.h\fP(3), \fIf_thread_condition_attribute_clock_get\fP(3), \fIf_thread_condition_attribute_clock_set\fP(3), \fIf_thread_condition_attribute_create\fP(3), \fIf_thread_condition_attribute_delete\fP(3), \fIf_thread_condition_attribute_shared_get\fP(3), \fIf_thread_condition_attribute_shared_set\fP(3), \fIpthread_condattr_setclock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_create.3
new file mode 100644 (file)
index 0000000..f81f779
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_condition_attribute_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attribute_create \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attribute.h>
+.sp
+\fBf_status_t f_thread_condition_attribute_create\fP(
+    \fBf_thread_condition_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Initialize a attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The attribute to set. This assigns the default to the attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attribute.h\fP(3), \fIf_thread_condition_attribute_clock_get\fP(3), \fIf_thread_condition_attribute_clock_set\fP(3), \fIf_thread_condition_attribute_create\fP(3), \fIf_thread_condition_attribute_delete\fP(3), \fIf_thread_condition_attribute_shared_get\fP(3), \fIf_thread_condition_attribute_shared_set\fP(3), \fIpthread_condattr_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_delete.3
new file mode 100644 (file)
index 0000000..b3fcea0
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_condition_attribute_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attribute_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attribute.h>
+.sp
+\fBf_status_t f_thread_condition_attribute_delete\fP(
+    \fBf_thread_condition_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread condition attribute.
+.PP
+The pthread_condattr_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The attribute to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attribute.h\fP(3), \fIf_thread_condition_attribute_clock_get\fP(3), \fIf_thread_condition_attribute_clock_set\fP(3), \fIf_thread_condition_attribute_create\fP(3), \fIf_thread_condition_attribute_delete\fP(3), \fIf_thread_condition_attribute_shared_get\fP(3), \fIf_thread_condition_attribute_shared_set\fP(3), \fIpthread_condattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_shared_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_shared_get.3
new file mode 100644 (file)
index 0000000..fe7258b
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_condition_attribute_shared_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attribute_shared_get \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attribute.h>
+.sp
+\fBf_status_t f_thread_condition_attribute_shared_get\fP(
+    \fBconst f_thread_condition_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                                  \fP\fIshared\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the process shared thread condition attribute.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread condition attribute.
+
+.TP
+.B shared
+The process shared attribute value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attribute.h\fP(3), \fIf_thread_condition_attribute_clock_get\fP(3), \fIf_thread_condition_attribute_clock_set\fP(3), \fIf_thread_condition_attribute_create\fP(3), \fIf_thread_condition_attribute_delete\fP(3), \fIf_thread_condition_attribute_shared_get\fP(3), \fIf_thread_condition_attribute_shared_set\fP(3), \fIpthread_condattr_getpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_shared_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attribute_shared_set.3
new file mode 100644 (file)
index 0000000..ef13d5d
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_condition_attribute_shared_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attribute_shared_set \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attribute.h>
+.sp
+\fBf_status_t f_thread_condition_attribute_shared_set\fP(
+    \fBconst int                             \fP\fIshared\fP,
+    \fBf_thread_condition_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the process shared thread condition attribute.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B shared
+The process shared attribute value.
+
+.TP
+.B attribute
+The thread condition attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attribute.h\fP(3), \fIf_thread_condition_attribute_clock_get\fP(3), \fIf_thread_condition_attribute_clock_set\fP(3), \fIf_thread_condition_attribute_create\fP(3), \fIf_thread_condition_attribute_delete\fP(3), \fIf_thread_condition_attribute_shared_get\fP(3), \fIf_thread_condition_attribute_shared_set\fP(3), \fIpthread_condattr_setpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributes_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributes_delete_callback.3
new file mode 100644 (file)
index 0000000..9716638
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_condition_attributes_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attributes_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attributes.h>
+.sp
+\fBf_status_t f_thread_condition_attributes_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_condition_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attributes.h\fP(3), \fIf_thread_condition_attributes_delete_callback\fP(3), \fIf_thread_condition_attributes_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributes_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributes_destroy_callback.3
new file mode 100644 (file)
index 0000000..8177c06
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_condition_attributes_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attributes_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attributes.h>
+.sp
+\fBf_status_t f_thread_condition_attributes_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_condition_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attributes.h\fP(3), \fIf_thread_condition_attributes_delete_callback\fP(3), \fIf_thread_condition_attributes_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributess_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributess_delete_callback.3
new file mode 100644 (file)
index 0000000..56af18c
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_condition_attributess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attributess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attributess.h>
+.sp
+\fBf_status_t f_thread_condition_attributess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_condition_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attributess.h\fP(3), \fIf_thread_condition_attributess_delete_callback\fP(3), \fIf_thread_condition_attributess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributess_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_attributess_destroy_callback.3
new file mode 100644 (file)
index 0000000..6dfb436
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_condition_attributess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_attributess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_attributess.h>
+.sp
+\fBf_status_t f_thread_condition_attributess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_condition_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_attributess.h\fP(3), \fIf_thread_condition_attributess_delete_callback\fP(3), \fIf_thread_condition_attributess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_create.3
new file mode 100644 (file)
index 0000000..b330834
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_condition_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_create \-
+.SH SYNOPSIS
+.nf
+.B #include <condition.h>
+.sp
+\fBf_status_t f_thread_condition_create\fP(
+    \fBconst f_thread_condition_attribute_t *const \fP\fIattribute\fP,
+    \fBf_thread_condition_t *const                 \fP\fIcondition\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Initialize a condition.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+(optional) The attribute to set. Set to NULL to not use (in which case the default attribute is used).
+
+.TP
+.B condition
+The condition to wait on.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition.h\fP(3), \fIf_thread_condition_create\fP(3), \fIf_thread_condition_delete\fP(3), \fIf_thread_condition_signal\fP(3), \fIf_thread_condition_signal_all\fP(3), \fIf_thread_condition_wait\fP(3), \fIf_thread_condition_wait_timed\fP(3), \fIpthread_cond_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_delete.3
new file mode 100644 (file)
index 0000000..b566b8a
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_condition_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <condition.h>
+.sp
+\fBf_status_t f_thread_condition_delete\fP(
+    \fBf_thread_condition_t *const \fP\fIcondition\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread condition.
+.PP
+The pthread_cond_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the condition is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B condition
+The condition to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition.h\fP(3), \fIf_thread_condition_create\fP(3), \fIf_thread_condition_delete\fP(3), \fIf_thread_condition_signal\fP(3), \fIf_thread_condition_signal_all\fP(3), \fIf_thread_condition_wait\fP(3), \fIf_thread_condition_wait_timed\fP(3), \fIpthread_cond_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_full_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_full_delete.3
new file mode 100644 (file)
index 0000000..0467652
--- /dev/null
@@ -0,0 +1,63 @@
+.TH f_thread_condition_full_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_full_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_full.h>
+.sp
+\fBf_status_t f_thread_condition_full_delete\fP(
+    \fBf_thread_condition_full_t *const \fP\fIfull\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread condition full.
+.PP
+The pthread_condattr_destroy() and pthread_condattr_destroy() functions have no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+When F_barrier (with error bit) is returned, then pthread_condattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_cond_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_cond_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_condattr_destroy(). F_condition (with error bit) on any error when calling pthread_cond_destroy().
+.SH PARAMETERS
+.TP
+.B full
+The full to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure of the condition and its associated attribute.
+.PP
+attribute: The associated attribute.
+.sp
+.RS
+.nf
+\fB
+struct f_thread_condition_full_t {
+  f_thread_condition_t           \fIcondition\fP;
+  f_thread_condition_attribute_t \fIattribute\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_full.h\fP(3), \fIf_thread_condition_full_delete\fP(3), \fIpthread_cond_destroy()\fP, \fIpthread_condattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fulls_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fulls_delete_callback.3
new file mode 100644 (file)
index 0000000..b38ccec
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_condition_fulls_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_fulls_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_fulls.h>
+.sp
+\fBf_status_t f_thread_condition_fulls_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_condition_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_condition (with error bit) is returned, then pthread_condattr_destroy() is not called. When F_attribute or F_condition (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_cond_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_cond_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_condattr_destroy(). F_condition (with error bit) on any error when calling pthread_cond_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_fulls.h\fP(3), \fIf_thread_condition_fulls_delete_callback\fP(3), \fIf_thread_condition_fulls_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_cond_destroy()\fP, \fIpthread_condattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fulls_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fulls_destroy_callback.3
new file mode 100644 (file)
index 0000000..bde4ef4
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_condition_fulls_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_fulls_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_fulls.h>
+.sp
+\fBf_status_t f_thread_condition_fulls_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_condition_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_condition (with error bit) is returned, then pthread_condattr_destroy() is not called. When F_attribute or F_condition (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_cond_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_cond_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_condattr_destroy(). F_condition (with error bit) on any error when calling pthread_cond_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_fulls.h\fP(3), \fIf_thread_condition_fulls_delete_callback\fP(3), \fIf_thread_condition_fulls_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_cond_destroy()\fP, \fIpthread_condattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fullss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fullss_delete_callback.3
new file mode 100644 (file)
index 0000000..cd3bd85
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_condition_fullss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_fullss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_fullss.h>
+.sp
+\fBf_status_t f_thread_condition_fullss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_condition_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_condition (with error bit) is returned, then pthread_condattr_destroy() is not called. When F_attribute or F_condition (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_cond_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_cond_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_condattr_destroy(). F_condition (with error bit) on any error when calling pthread_cond_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_fullss.h\fP(3), \fIf_thread_condition_fullss_delete_callback\fP(3), \fIf_thread_condition_fullss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_cond_destroy()\fP, \fIpthread_condattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fullss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_fullss_destroy_callback.3
new file mode 100644 (file)
index 0000000..5428c79
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_condition_fullss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_fullss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <condition_fullss.h>
+.sp
+\fBf_status_t f_thread_condition_fullss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_condition_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_condition (with error bit) is returned, then pthread_condattr_destroy() is not called. When F_attribute or F_condition (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_cond_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_cond_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_condattr_destroy(). F_condition (with error bit) on any error when calling pthread_cond_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition_fullss.h\fP(3), \fIf_thread_condition_fullss_delete_callback\fP(3), \fIf_thread_condition_fullss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_cond_destroy()\fP, \fIpthread_condattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_signal.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_signal.3
new file mode 100644 (file)
index 0000000..7f290df
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_condition_signal "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <condition.h>
+.sp
+\fBf_status_t f_thread_condition_signal\fP(
+    \fBf_thread_condition_t *const \fP\fIcondition\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal a thread waiting on a condition.
+.PP
+Only a single thread waiting on this condition is signaled.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B condition
+The condition to broadcast the unblock signal to.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition.h\fP(3), \fIf_thread_condition_create\fP(3), \fIf_thread_condition_delete\fP(3), \fIf_thread_condition_signal\fP(3), \fIf_thread_condition_signal_all\fP(3), \fIf_thread_condition_wait\fP(3), \fIf_thread_condition_wait_timed\fP(3), \fIpthread_cond_signal()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_signal_all.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_signal_all.3
new file mode 100644 (file)
index 0000000..d9c5039
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_thread_condition_signal_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_signal_all \-
+.SH SYNOPSIS
+.nf
+.B #include <condition.h>
+.sp
+\fBf_status_t f_thread_condition_signal_all\fP(
+    \fBf_thread_condition_t *const \fP\fIcondition\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal all threads waiting on a condition.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B condition
+The condition to broadcast the unblock signal to.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition.h\fP(3), \fIf_thread_condition_create\fP(3), \fIf_thread_condition_delete\fP(3), \fIf_thread_condition_signal\fP(3), \fIf_thread_condition_signal_all\fP(3), \fIf_thread_condition_wait\fP(3), \fIf_thread_condition_wait_timed\fP(3), \fIpthread_cond_broadcast()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_wait.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_wait.3
new file mode 100644 (file)
index 0000000..f248d4a
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_thread_condition_wait "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_wait \-
+.SH SYNOPSIS
+.nf
+.B #include <condition.h>
+.sp
+\fBf_status_t f_thread_condition_wait\fP(
+    \fBf_thread_condition_t *const \fP\fIcondition\fP,
+    \fBf_thread_mutex_t *const     \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Wait until condition is triggered.
+.PP
+This is a blocking operation.
+.PP
+The caller must lock the mutex before calling this. The caller should unlock the mutex after calling this.
+.PP
+F_dead (with error bit) if the owning thread terminated while holding the mutex lock (thread is dead). F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation (possibly because mutex is not owned by current thread). F_recover_not (with error bit) if the state protected by the mutex is not recoverable.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B condition
+The condition to wait on.
+
+.TP
+.B mutex
+The mutex to use for waiting on condition.
+
+.SH RETURN VALUE
+.PP
+F_condition on success (condition is triggered).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition.h\fP(3), \fIf_thread_condition_create\fP(3), \fIf_thread_condition_delete\fP(3), \fIf_thread_condition_signal\fP(3), \fIf_thread_condition_signal_all\fP(3), \fIf_thread_condition_wait\fP(3), \fIf_thread_condition_wait_timed\fP(3), \fIpthread_cond_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_condition_wait_timed.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_condition_wait_timed.3
new file mode 100644 (file)
index 0000000..d332018
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_condition_wait_timed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_condition_wait_timed \-
+.SH SYNOPSIS
+.nf
+.B #include <condition.h>
+.sp
+\fBf_status_t f_thread_condition_wait_timed\fP(
+    \fBconst f_time_spec_t *const  \fP\fIwait\fP,
+    \fBf_thread_condition_t *const \fP\fIcondition\fP,
+    \fBf_thread_mutex_t *const     \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Wait until condition is triggered, blocking until the timeout expires.
+.PP
+This is a semi-blocking operation. This blocks until timeout and then no longer block.
+.PP
+The caller must lock the mutex before calling this. The caller should unlock the mutex after calling this.
+.PP
+Must not be NULL.
+.PP
+F_dead (with error bit) if the owning thread terminated while holding the mutex lock (thread is dead). F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation (possibly because mutex is not owned by current thread). F_recover_not (with error bit) if the state protected by the mutex is not recoverable.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B wait
+The amount of time to wait for. The wait time is relative to the clock, so consider calling clock_gettime() or gettimeofday() and then adding the amount of wait time.
+
+.TP
+.B condition
+The condition to wait on.
+
+.TP
+.B mutex
+The mutex to use for waiting on condition.
+
+.SH RETURN VALUE
+.PP
+F_condition on success (condition is triggered). F_time on success, and wait timeout was reached before condition was triggered.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcondition.h\fP(3), \fIf_thread_condition_create\fP(3), \fIf_thread_condition_delete\fP(3), \fIf_thread_condition_signal\fP(3), \fIf_thread_condition_signal_all\fP(3), \fIf_thread_condition_wait\fP(3), \fIf_thread_condition_wait_timed\fP(3), \fIpthread_cond_timedwait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_conditions_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_conditions_delete_callback.3
new file mode 100644 (file)
index 0000000..f824f85
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_conditions_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_conditions_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <conditions.h>
+.sp
+\fBf_status_t f_thread_conditions_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_conditions_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconditions.h\fP(3), \fIf_thread_conditions_delete_callback\fP(3), \fIf_thread_conditions_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIpthread_cond_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_conditions_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_conditions_destroy_callback.3
new file mode 100644 (file)
index 0000000..e90dce5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_conditions_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_conditions_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <conditions.h>
+.sp
+\fBf_status_t f_thread_conditions_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_conditions_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconditions.h\fP(3), \fIf_thread_conditions_delete_callback\fP(3), \fIf_thread_conditions_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIpthread_cond_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_conditionss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_conditionss_delete_callback.3
new file mode 100644 (file)
index 0000000..dd81786
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_conditionss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_conditionss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <conditionss.h>
+.sp
+\fBf_status_t f_thread_conditionss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_conditionss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconditionss.h\fP(3), \fIf_thread_conditionss_delete_callback\fP(3), \fIf_thread_conditionss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIpthread_cond_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_conditionss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_conditionss_destroy_callback.3
new file mode 100644 (file)
index 0000000..09ae6e5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_conditionss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_conditionss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <conditionss.h>
+.sp
+\fBf_status_t f_thread_conditionss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_conditionss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconditionss.h\fP(3), \fIf_thread_conditionss_delete_callback\fP(3), \fIf_thread_conditionss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIpthread_cond_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_create.3
new file mode 100644 (file)
index 0000000..2ff979e
--- /dev/null
@@ -0,0 +1,53 @@
+.TH f_thread_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_create \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_create\fP(
+    \fBconst f_thread_attribute_t *const \fP\fIattribute\fP,
+    \fBf_thread_id_t *const              \fP\fIid\fP,
+    \fBconst f_void_pointer_call_t       \fP\fIroutine\fP,
+    \fBvoid *const                       \fP\fIargument\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to set the scheduling policy and parameters specified in attribute. F_resource_not (with error bit) if there are not enough resources to create another thread.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+(optional) The thread attributes. Set to NULL to use default attributes.
+
+.TP
+.B id
+The thread ID. This gets populated with the created thread ID (aka: the "child" thread).
+
+.TP
+.B routine
+The function to execute.
+
+.TP
+.B argument
+(optional) The structure containing all arguments to pass to the routine. Set to NULL to not pass an argument.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_create()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_detach.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_detach.3
new file mode 100644 (file)
index 0000000..e5af651
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_detach "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_detach \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_detach\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Detatch the given thread.
+.PP
+When a detached thread exits, the resources will automatically be returned to the system without needing another thread to join with it.
+.PP
+Only joinable, undetached, threads are detachable.
+.PP
+Once a thread is detached, it can no longer be joined.
+.PP
+F_found_not (with error bit) if no thread by the given ID was found. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The ID of the thread to detach.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_detach()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_exit.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_exit.3
new file mode 100644 (file)
index 0000000..496e0b9
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_thread_exit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_exit \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_exit\fP(
+    \fBint *const \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Have the current thread exit.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B result
+The code returned by the exited thread.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_exit()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_ids_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_ids_delete_callback.3
new file mode 100644 (file)
index 0000000..a3d890d
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_ids_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_ids_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <ids.h>
+.sp
+\fBf_status_t f_thread_ids_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_ids_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIids.h\fP(3), \fIf_thread_ids_delete_callback\fP(3), \fIf_thread_ids_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_ids_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_ids_destroy_callback.3
new file mode 100644 (file)
index 0000000..12bfd5a
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_ids_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_ids_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <ids.h>
+.sp
+\fBf_status_t f_thread_ids_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_ids_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIids.h\fP(3), \fIf_thread_ids_delete_callback\fP(3), \fIf_thread_ids_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_idss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_idss_delete_callback.3
new file mode 100644 (file)
index 0000000..db036e5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_idss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_idss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <idss.h>
+.sp
+\fBf_status_t f_thread_idss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_idss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIidss.h\fP(3), \fIf_thread_idss_delete_callback\fP(3), \fIf_thread_idss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_idss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_idss_destroy_callback.3
new file mode 100644 (file)
index 0000000..3d2cf4e
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_idss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_idss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <idss.h>
+.sp
+\fBf_status_t f_thread_idss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_idss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIidss.h\fP(3), \fIf_thread_idss_delete_callback\fP(3), \fIf_thread_idss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_join.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_join.3
new file mode 100644 (file)
index 0000000..84e3ed5
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_thread_join "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_join \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_join\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP,
+    \fBvoid **const        \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Wait until the given thread exits and then join it to the current thread.
+.PP
+This is a blocking operation.
+.PP
+Set to NULL to not use.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock.ead. F_found_not (with error bit) if no thread by the given ID was found. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the thread is not joinable or is already being joined by another thread.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The ID of the thread to wait for.
+
+.TP
+.B result
+(optional) The data returned by the terminated thread (usually the exit status). If the terminated thread is cancelled, then this holds PTHREAD_CANCELED.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_join()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_join_timed.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_join_timed.3
new file mode 100644 (file)
index 0000000..ff72064
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_thread_join_timed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_join_timed \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_join_timed\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP,
+    \fBconst f_time_spec_t \fP\fIwait\fP,
+    \fBvoid **const        \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to join the given thread to the current thread, blocking until the timeout expires.
+.PP
+This is a semi-blocking operation. This blocks until timeout and then no longer block.
+.PP
+Set to NULL to not use.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_found_not (with error bit) if no thread by the given ID was found. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the thread is not joinable or is already being joined by another thread.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The ID of the thread to wait for.
+
+.TP
+.B wait
+The amount of time to wait for. The wait time is relative to the clock, so consider calling clock_gettime() or gettimeofday() and then adding the amount of wait time.
+
+.TP
+.B result
+(optional) The data returned by the terminated thread (usually the exit status). If the terminated thread is cancelled, then this holds PTHREAD_CANCELED.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but thread could not be joined because it has not yet exited. F_time on success, but thread could not be joined because it has not yet exited and the wait timeout was reached.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_timedjoin_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_join_try.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_join_try.3
new file mode 100644 (file)
index 0000000..7e07922
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_thread_join_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_join_try \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_join_try\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP,
+    \fBvoid **const        \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to join the given thread to the current thread.
+.PP
+This is a non-blocking operation.
+.PP
+Set to NULL to not use.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock.ead. F_found_not (with error bit) if no thread by the given ID was found. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the thread is not joinable or is already being joined by another thread.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The ID of the thread to wait for.
+
+.TP
+.B result
+(optional) The data returned by the terminated thread (usually the exit status). If the terminated thread is cancelled, then this holds PTHREAD_CANCELED.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but thread could not be joined because it has not yet exited.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_tryjoin_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_key_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_key_create.3
new file mode 100644 (file)
index 0000000..b1c4733
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_key_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_key_create \-
+.SH SYNOPSIS
+.nf
+.B #include <key.h>
+.sp
+\fBf_status_t f_thread_key_create\fP(
+    \fBvoid(*)(void *)       \fP\fIroutine\fP,
+    \fBf_thread_key_t *const \fP\fIkey\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread key.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to set the scheduling policy and parameters specified in attribute.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B routine
+The function to execute for deallocation/deleting.
+
+.TP
+.B key
+The thread key.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkey.h\fP(3), \fIf_thread_key_create\fP(3), \fIf_thread_key_delete\fP(3), \fIf_thread_key_get\fP(3), \fIf_thread_key_set\fP(3), \fIpthread_key_create()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_key_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_key_delete.3
new file mode 100644 (file)
index 0000000..e79d9c2
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_key_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_key_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <key.h>
+.sp
+\fBf_status_t f_thread_key_delete\fP(
+    \fBf_thread_key_t *const \fP\fIkey\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread key.
+.PP
+The pthread_key_delete() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B key
+The key to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkey.h\fP(3), \fIf_thread_key_create\fP(3), \fIf_thread_key_delete\fP(3), \fIf_thread_key_get\fP(3), \fIf_thread_key_set\fP(3), \fIpthread_key_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_key_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_key_get.3
new file mode 100644 (file)
index 0000000..1cf47df
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_key_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_key_get \-
+.SH SYNOPSIS
+.nf
+.B #include <key.h>
+.sp
+\fBf_status_t f_thread_key_get\fP(
+    \fBconst f_thread_key_t \fP\fIkey\fP,
+    \fBvoid **const         \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the value of a thread key.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B key
+The thread key.
+
+.TP
+.B value
+The assigned thread key value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkey.h\fP(3), \fIf_thread_key_create\fP(3), \fIf_thread_key_delete\fP(3), \fIf_thread_key_get\fP(3), \fIf_thread_key_set\fP(3), \fIpthread_getspecific()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_key_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_key_set.3
new file mode 100644 (file)
index 0000000..3a6ad0a
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_key_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_key_set \-
+.SH SYNOPSIS
+.nf
+.B #include <key.h>
+.sp
+\fBf_status_t f_thread_key_set\fP(
+    \fBconst f_thread_key_t \fP\fIkey\fP,
+    \fBconst void *const    \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the value of a thread key.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B key
+The thread key.
+
+.TP
+.B value
+The thread key value to assign.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkey.h\fP(3), \fIf_thread_key_create\fP(3), \fIf_thread_key_delete\fP(3), \fIf_thread_key_get\fP(3), \fIf_thread_key_set\fP(3), \fIpthread_setspecific()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_keys_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_keys_delete_callback.3
new file mode 100644 (file)
index 0000000..aadfea1
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_keys_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_keys_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <keys.h>
+.sp
+\fBf_status_t f_thread_keys_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_keys_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkeys.h\fP(3), \fIf_thread_keys_delete_callback\fP(3), \fIf_thread_keys_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_keys_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_keys_destroy_callback.3
new file mode 100644 (file)
index 0000000..0474b70
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_keys_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_keys_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <keys.h>
+.sp
+\fBf_status_t f_thread_keys_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_keys_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkeys.h\fP(3), \fIf_thread_keys_delete_callback\fP(3), \fIf_thread_keys_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_keyss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_keyss_delete_callback.3
new file mode 100644 (file)
index 0000000..0e0e190
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_keyss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_keyss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <keyss.h>
+.sp
+\fBf_status_t f_thread_keyss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_keyss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkeyss.h\fP(3), \fIf_thread_keyss_delete_callback\fP(3), \fIf_thread_keyss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_keyss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_keyss_destroy_callback.3
new file mode 100644 (file)
index 0000000..95874b3
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_keyss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_keyss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <keyss.h>
+.sp
+\fBf_status_t f_thread_keyss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_keyss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIkeyss.h\fP(3), \fIf_thread_keyss_delete_callback\fP(3), \fIf_thread_keyss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_create.3
new file mode 100644 (file)
index 0000000..30974bb
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_lock_attribute_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attribute_create \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attribute.h>
+.sp
+\fBf_status_t f_thread_lock_attribute_create\fP(
+    \fBf_thread_lock_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread lock attribute.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the lock is busy. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation. F_resource_not (with error bit) if max lockes is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The lock attributes to create.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attribute.h\fP(3), \fIf_thread_lock_attribute_create\fP(3), \fIf_thread_lock_attribute_delete\fP(3), \fIf_thread_lock_attribute_shared_get\fP(3), \fIf_thread_lock_attribute_shared_set\fP(3), \fIpthread_rwlockattr_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_delete.3
new file mode 100644 (file)
index 0000000..b848d4c
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_lock_attribute_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attribute_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attribute.h>
+.sp
+\fBf_status_t f_thread_lock_attribute_delete\fP(
+    \fBf_thread_lock_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread lock attribute.
+.PP
+The pthread_rwlockattr_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The attribute to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attribute.h\fP(3), \fIf_thread_lock_attribute_create\fP(3), \fIf_thread_lock_attribute_delete\fP(3), \fIf_thread_lock_attribute_shared_get\fP(3), \fIf_thread_lock_attribute_shared_set\fP(3), \fIpthread_rwlockattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_shared_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_shared_get.3
new file mode 100644 (file)
index 0000000..6dfa8f6
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_lock_attribute_shared_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attribute_shared_get \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attribute.h>
+.sp
+\fBf_status_t f_thread_lock_attribute_shared_get\fP(
+    \fBconst f_thread_lock_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                             \fP\fIshared\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the lock attribute process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The lock attribute.
+
+.TP
+.B shared
+The lock shared attribute value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attribute.h\fP(3), \fIf_thread_lock_attribute_create\fP(3), \fIf_thread_lock_attribute_delete\fP(3), \fIf_thread_lock_attribute_shared_get\fP(3), \fIf_thread_lock_attribute_shared_set\fP(3), \fIpthread_rwlockattr_getpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_shared_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attribute_shared_set.3
new file mode 100644 (file)
index 0000000..2f3bdb3
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_lock_attribute_shared_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attribute_shared_set \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attribute.h>
+.sp
+\fBf_status_t f_thread_lock_attribute_shared_set\fP(
+    \fBconst int                        \fP\fIshared\fP,
+    \fBf_thread_lock_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the lock attribute process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B shared
+The lock shared attribute value.
+
+.TP
+.B attribute
+The lock attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attribute.h\fP(3), \fIf_thread_lock_attribute_create\fP(3), \fIf_thread_lock_attribute_delete\fP(3), \fIf_thread_lock_attribute_shared_get\fP(3), \fIf_thread_lock_attribute_shared_set\fP(3), \fIpthread_rwlockattr_setpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributes_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributes_delete_callback.3
new file mode 100644 (file)
index 0000000..01e5b4a
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_lock_attributes_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attributes_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attributes.h>
+.sp
+\fBf_status_t f_thread_lock_attributes_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_lock_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attributes.h\fP(3), \fIf_thread_lock_attributes_delete_callback\fP(3), \fIf_thread_lock_attributes_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributes_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributes_destroy_callback.3
new file mode 100644 (file)
index 0000000..34d7dfb
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_lock_attributes_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attributes_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attributes.h>
+.sp
+\fBf_status_t f_thread_lock_attributes_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_lock_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attributes.h\fP(3), \fIf_thread_lock_attributes_delete_callback\fP(3), \fIf_thread_lock_attributes_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributess_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributess_delete_callback.3
new file mode 100644 (file)
index 0000000..9f3a670
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_lock_attributess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attributess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attributess.h>
+.sp
+\fBf_status_t f_thread_lock_attributess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_lock_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attributess.h\fP(3), \fIf_thread_lock_attributess_delete_callback\fP(3), \fIf_thread_lock_attributess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributess_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_attributess_destroy_callback.3
new file mode 100644 (file)
index 0000000..10623a3
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_lock_attributess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_attributess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_attributess.h>
+.sp
+\fBf_status_t f_thread_lock_attributess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_lock_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_attributess.h\fP(3), \fIf_thread_lock_attributess_delete_callback\fP(3), \fIf_thread_lock_attributess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_create.3
new file mode 100644 (file)
index 0000000..9394e72
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_lock_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_create \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_create\fP(
+    \fBconst f_thread_lock_attribute_t *const \fP\fIattribute\fP,
+    \fBf_thread_lock_t *const                 \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread read/write lock.
+.PP
+F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max lockes is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The lock attribute.
+
+.TP
+.B lock
+The lock to create.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_delete.3
new file mode 100644 (file)
index 0000000..60f6a24
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_lock_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_delete\fP(
+    \fBf_thread_lock_t *const \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread read/write lock.
+.PP
+The pthread_rwlock_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the lock is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B lock
+The lock to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_full_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_full_delete.3
new file mode 100644 (file)
index 0000000..0cb5bc7
--- /dev/null
@@ -0,0 +1,65 @@
+.TH f_thread_lock_full_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_full_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_full.h>
+.sp
+\fBf_status_t f_thread_lock_full_delete\fP(
+    \fBf_thread_lock_full_t *const \fP\fIfull\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread lock full.
+.PP
+The pthread_rwlock_destroy() and pthread_rwlockattr_destroy() functions have no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+When F_read_write (with error bit) is returned, then pthread_rwlockattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_rwlock_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_rwlock_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_rwlockattr_destroy(). F_read_write (with error bit) on any error when calling pthread_rwlock_destroy().
+.SH PARAMETERS
+.TP
+.B full
+The full to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure of the lock and its associated attribute.
+.PP
+attribute: The associated attribute.
+.sp
+.RS
+.nf
+\fB
+struct f_thread_lock_full_t {
+  f_thread_lock_t           \fIlock\fP;
+  f_thread_lock_attribute_t \fIattribute\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_full.h\fP(3), \fIf_thread_lock_full_delete\fP(3), \fIpthread_rwlock_destroy()\fP, \fIpthread_rwlockattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fulls_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fulls_delete_callback.3
new file mode 100644 (file)
index 0000000..1395279
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_lock_fulls_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_fulls_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_fulls.h>
+.sp
+\fBf_status_t f_thread_lock_fulls_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_lock_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_read_write (with error bit) is returned, then pthread_rwlockattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_rwlock_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_rwlock_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_rwlockattr_destroy(). F_read_write (with error bit) on any error when calling pthread_rwlock_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_fulls.h\fP(3), \fIf_thread_lock_fulls_delete_callback\fP(3), \fIf_thread_lock_fulls_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_rwlock_destroy()\fP, \fIpthread_rwlockattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fulls_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fulls_destroy_callback.3
new file mode 100644 (file)
index 0000000..8e513a3
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_lock_fulls_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_fulls_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_fulls.h>
+.sp
+\fBf_status_t f_thread_lock_fulls_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_lock_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_read_write (with error bit) is returned, then pthread_rwlockattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_rwlock_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_rwlock_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_rwlockattr_destroy(). F_read_write (with error bit) on any error when calling pthread_rwlock_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_fulls.h\fP(3), \fIf_thread_lock_fulls_delete_callback\fP(3), \fIf_thread_lock_fulls_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_rwlock_destroy()\fP, \fIpthread_rwlockattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fullss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fullss_delete_callback.3
new file mode 100644 (file)
index 0000000..52e4080
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_lock_fullss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_fullss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_fullss.h>
+.sp
+\fBf_status_t f_thread_lock_fullss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_lock_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_read_write (with error bit) is returned, then pthread_rwlockattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_rwlock_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_rwlock_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_rwlockattr_destroy(). F_read_write (with error bit) on any error when calling pthread_rwlock_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_fullss.h\fP(3), \fIf_thread_lock_fullss_delete_callback\fP(3), \fIf_thread_lock_fullss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_rwlock_destroy()\fP, \fIpthread_rwlockattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fullss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_fullss_destroy_callback.3
new file mode 100644 (file)
index 0000000..e7ac956
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_lock_fullss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_fullss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lock_fullss.h>
+.sp
+\fBf_status_t f_thread_lock_fullss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_lock_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_read_write (with error bit) is returned, then pthread_rwlockattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a condition is busy when calling pthread_rwlock_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_rwlock_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_rwlockattr_destroy(). F_read_write (with error bit) on any error when calling pthread_rwlock_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock_fullss.h\fP(3), \fIf_thread_lock_fullss_delete_callback\fP(3), \fIf_thread_lock_fullss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_rwlock_destroy()\fP, \fIpthread_rwlockattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_read.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_read.3
new file mode 100644 (file)
index 0000000..50f0292
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_lock_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_read \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_read\fP(
+    \fBf_thread_lock_t *const \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the read part of a read/write lock.
+.PP
+This is a blocking function.
+.PP
+Must not be NULL.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max number of read locks allowed is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B lock
+The thread lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_rdlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_read_timed.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_read_timed.3
new file mode 100644 (file)
index 0000000..fca7b47
--- /dev/null
@@ -0,0 +1,49 @@
+.TH f_thread_lock_read_timed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_read_timed \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_read_timed\fP(
+    \fBconst f_time_spec_t *const \fP\fItimeout\fP,
+    \fBf_thread_lock_t *const     \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the read part of a read/write lock, waiting for a set period of time to get the lock if already locked.
+.PP
+If the read part of the read/write lock is already locked and the timeout expires, then the lock attempt fails.
+.PP
+This is a blocking function (until timeout expires).
+.PP
+Must not be NULL.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max number of read locks allowed is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B timeout
+The timeout.
+
+.TP
+.B lock
+The read/write lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_time if the timeout was reached before obtaining the lock.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_timedrdlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_read_try.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_read_try.3
new file mode 100644 (file)
index 0000000..2bdf510
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_lock_read_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_read_try \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_read_try\fP(
+    \fBf_thread_lock_t *const \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to lock the read part of a read/write lock.
+.PP
+If lock is already locked, return immediately.
+.PP
+This is a non-blocking function.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max number of read locks allowed is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B lock
+The thread lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but the lock is already locked.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_tryrdlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_write.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_write.3
new file mode 100644 (file)
index 0000000..12e7830
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_lock_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_write \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_write\fP(
+    \fBf_thread_lock_t *const \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the write part of a read/write lock.
+.PP
+This is a blocking function.
+.PP
+Must not be NULL.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B lock
+The thread lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_wrlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_write_timed.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_write_timed.3
new file mode 100644 (file)
index 0000000..aea7d15
--- /dev/null
@@ -0,0 +1,49 @@
+.TH f_thread_lock_write_timed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_write_timed \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_write_timed\fP(
+    \fBconst f_time_spec_t *const \fP\fItimeout\fP,
+    \fBf_thread_lock_t *const     \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the write part of a read/write lock, waiting for a set period of time to get the lock if already locked.
+.PP
+If the write part of the read/write lock is already locked and the timeout expires, then the lock attempt fails.
+.PP
+This is a blocking function (until timeout expires).
+.PP
+Must not be NULL.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B timeout
+The timeout.
+
+.TP
+.B lock
+The read/write lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_time if the timeout was reached before obtaining the lock.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_timedwrlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lock_write_try.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lock_write_try.3
new file mode 100644 (file)
index 0000000..8345809
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_lock_write_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lock_write_try \-
+.SH SYNOPSIS
+.nf
+.B #include <lock.h>
+.sp
+\fBf_status_t f_thread_lock_write_try\fP(
+    \fBf_thread_lock_t *const \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to lock the read part of a read/write lock.
+.PP
+If lock is already locked, return immediately.
+.PP
+This is a non-blocking function.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B lock
+The thread lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but the lock is already locked.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlock.h\fP(3), \fIf_thread_lock_create\fP(3), \fIf_thread_lock_delete\fP(3), \fIf_thread_lock_read\fP(3), \fIf_thread_lock_read_timed\fP(3), \fIf_thread_lock_read_try\fP(3), \fIf_thread_lock_write\fP(3), \fIf_thread_lock_write_timed\fP(3), \fIf_thread_lock_write_try\fP(3), \fIpthread_rwlock_trywrlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_locks_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_locks_delete_callback.3
new file mode 100644 (file)
index 0000000..46dee36
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_locks_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_locks_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <locks.h>
+.sp
+\fBf_status_t f_thread_locks_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_locks_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a lock is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlocks.h\fP(3), \fIf_thread_locks_delete_callback\fP(3), \fIf_thread_locks_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_locks_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_locks_destroy_callback.3
new file mode 100644 (file)
index 0000000..153d85e
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_locks_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_locks_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <locks.h>
+.sp
+\fBf_status_t f_thread_locks_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_locks_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a lock is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlocks.h\fP(3), \fIf_thread_locks_delete_callback\fP(3), \fIf_thread_locks_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lockss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lockss_delete_callback.3
new file mode 100644 (file)
index 0000000..fe2a3ce
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_lockss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lockss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lockss.h>
+.sp
+\fBf_status_t f_thread_lockss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_lockss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a lock is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlockss.h\fP(3), \fIf_thread_lockss_delete_callback\fP(3), \fIf_thread_lockss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_lockss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_lockss_destroy_callback.3
new file mode 100644 (file)
index 0000000..b841ab0
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_lockss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_lockss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <lockss.h>
+.sp
+\fBf_status_t f_thread_lockss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_lockss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a lock is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlockss.h\fP(3), \fIf_thread_lockss_delete_callback\fP(3), \fIf_thread_lockss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_create.3
new file mode 100644 (file)
index 0000000..d34e3be
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_mutex_attribute_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_create \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_create\fP(
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread mutex attribute.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the mutex is busy. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation. F_resource_not (with error bit) if max mutexes is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The mutex attributes to create.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_delete.3
new file mode 100644 (file)
index 0000000..963d79a
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_mutex_attribute_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_delete\fP(
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread mutex attribute.
+.PP
+The pthread_mutexattr_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The attribute to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_priority_ceiling_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_priority_ceiling_get.3
new file mode 100644 (file)
index 0000000..a1224fd
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_mutex_attribute_priority_ceiling_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_priority_ceiling_get \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_priority_ceiling_get\fP(
+    \fBconst f_thread_mutex_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                              \fP\fIceiling\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mutex attribute priority ceiling.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread mutex attribute.
+
+.TP
+.B ceiling
+The priority ceiling.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_getprioceiling()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_priority_ceiling_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_priority_ceiling_set.3
new file mode 100644 (file)
index 0000000..26cd51f
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_mutex_attribute_priority_ceiling_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_priority_ceiling_set \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_priority_ceiling_set\fP(
+    \fBconst int                         \fP\fIceiling\fP,
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the mutex attribute priority ceiling.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation.
+.SH PARAMETERS
+.TP
+.B ceiling
+The priority ceiling.
+
+.TP
+.B attribute
+The thread mutex attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_setprioceiling()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_protocol_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_protocol_get.3
new file mode 100644 (file)
index 0000000..33052d2
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_protocol_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_protocol_get \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_protocol_get\fP(
+    \fBconst f_thread_mutex_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                              \fP\fIprotocol\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mutex attribute protocol.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The thread mutex attribute.
+
+.TP
+.B protocol
+The protocol.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_getprotocol()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_protocol_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_protocol_set.3
new file mode 100644 (file)
index 0000000..b3fcfea
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_protocol_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_protocol_set \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_protocol_set\fP(
+    \fBconst int                         \fP\fIprotocol\fP,
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the mutex attribute protocol.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation. F_support_not (with error bit) if the protocol is not supported.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B protocol
+The protocol.
+
+.TP
+.B attribute
+The thread mutex attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_setprotocol()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_robust_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_robust_get.3
new file mode 100644 (file)
index 0000000..ce590a6
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_robust_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_robust_get \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_robust_get\fP(
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                        \fP\fIrobust\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the robust mutex attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The mutex attributes to set the value of.
+
+.TP
+.B robust
+The value to set to robust attribute to. See f_thread_mutex_stalled_d and f_thread_mutex_robust_d.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_setrobust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_robust_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_robust_set.3
new file mode 100644 (file)
index 0000000..86749e3
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_robust_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_robust_set \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_robust_set\fP(
+    \fBconst int                         \fP\fIrobust\fP,
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the robust mutex attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B robust
+The value to set to robust attribute to. See f_thread_mutex_stalled_d and f_thread_mutex_robust_d.
+
+.TP
+.B attribute
+The mutex attributes to set the value of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_setrobust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_shared_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_shared_get.3
new file mode 100644 (file)
index 0000000..028a930
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_shared_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_shared_get \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_shared_get\fP(
+    \fBconst f_thread_mutex_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                              \fP\fIshared\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mutex attribute process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The mutex attribute.
+
+.TP
+.B shared
+The mutex shared attribute value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_getpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_shared_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_shared_set.3
new file mode 100644 (file)
index 0000000..6f26b5c
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_shared_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_shared_set \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_shared_set\fP(
+    \fBconst int                         \fP\fIshared\fP,
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the mutex attribute process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B shared
+The mutex shared attribute value.
+
+.TP
+.B attribute
+The mutex attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_setpshared()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_type_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_type_get.3
new file mode 100644 (file)
index 0000000..ad1620d
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_type_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_type_get \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_type_get\fP(
+    \fBconst f_thread_mutex_attribute_t *const \fP\fIattribute\fP,
+    \fBint *const                              \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mutex attribute type.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+The mutex attribute.
+
+.TP
+.B type
+The type.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_gettype()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_type_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attribute_type_set.3
new file mode 100644 (file)
index 0000000..ed2f5a6
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_attribute_type_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attribute_type_set \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attribute.h>
+.sp
+\fBf_status_t f_thread_mutex_attribute_type_set\fP(
+    \fBconst int                         \fP\fItype\fP,
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the mutex attribute process shared thread attribute.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B type
+The type.
+
+.TP
+.B attribute
+The mutex attribute.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attribute.h\fP(3), \fIf_thread_mutex_attribute_create\fP(3), \fIf_thread_mutex_attribute_delete\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_get\fP(3), \fIf_thread_mutex_attribute_priority_ceiling_set\fP(3), \fIf_thread_mutex_attribute_protocol_get\fP(3), \fIf_thread_mutex_attribute_protocol_set\fP(3), \fIf_thread_mutex_attribute_robust_get\fP(3), \fIf_thread_mutex_attribute_robust_set\fP(3), \fIf_thread_mutex_attribute_shared_get\fP(3), \fIf_thread_mutex_attribute_shared_set\fP(3), \fIf_thread_mutex_attribute_type_get\fP(3), \fIf_thread_mutex_attribute_type_set\fP(3), \fIpthread_mutexattr_settype()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributes_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributes_delete_callback.3
new file mode 100644 (file)
index 0000000..78fd9a8
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutex_attributes_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attributes_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attributes.h>
+.sp
+\fBf_status_t f_thread_mutex_attributes_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_mutex_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attributes.h\fP(3), \fIf_thread_mutex_attributes_delete_callback\fP(3), \fIf_thread_mutex_attributes_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributes_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributes_destroy_callback.3
new file mode 100644 (file)
index 0000000..f4a3c6f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutex_attributes_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attributes_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attributes.h>
+.sp
+\fBf_status_t f_thread_mutex_attributes_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_mutex_attributes_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attributes.h\fP(3), \fIf_thread_mutex_attributes_delete_callback\fP(3), \fIf_thread_mutex_attributes_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributess_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributess_delete_callback.3
new file mode 100644 (file)
index 0000000..7907d95
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutex_attributess_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attributess_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attributess.h>
+.sp
+\fBf_status_t f_thread_mutex_attributess_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_mutex_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attributess.h\fP(3), \fIf_thread_mutex_attributess_delete_callback\fP(3), \fIf_thread_mutex_attributess_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributess_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_attributess_destroy_callback.3
new file mode 100644 (file)
index 0000000..9d7fb34
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutex_attributess_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_attributess_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_attributess.h>
+.sp
+\fBf_status_t f_thread_mutex_attributess_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_mutex_attributess_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_attributess.h\fP(3), \fIf_thread_mutex_attributess_delete_callback\fP(3), \fIf_thread_mutex_attributess_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_consistent.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_consistent.3
new file mode 100644 (file)
index 0000000..25d6b20
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_mutex_consistent "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_consistent \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_consistent\fP(
+    \fBf_thread_mutex_t *const \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Mark a robust mutex as consistent.
+.PP
+Use this to re-mark a mutex that is no longer in a consistent state.
+.PP
+This should be used to address mutex locks that return F_dead when attempting to acquire a lock.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_robust (with error bit) if mutex is either not robust or it does not protect from an inconsistent state.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mutex
+The thread mutex.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_consistent()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_create.3
new file mode 100644 (file)
index 0000000..e625ba2
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_create \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_create\fP(
+    \fBf_thread_mutex_attribute_t *const \fP\fIattribute\fP,
+    \fBf_thread_mutex_t *const           \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread mutex.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the mutex is busy. F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation. F_resource_not (with error bit) if max mutexes is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B attribute
+(optional) The mutex attributes to set. Set to NULL to not use (in which case the default attributes are used).
+
+.TP
+.B mutex
+The mutex to create.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_delete.3
new file mode 100644 (file)
index 0000000..dc8420c
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_mutex_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_delete\fP(
+    \fBf_thread_mutex_t *const \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread mutex.
+.PP
+The pthread_mutex_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the mutex is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mutex
+The mutex to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_full_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_full_delete.3
new file mode 100644 (file)
index 0000000..ac5f8d8
--- /dev/null
@@ -0,0 +1,63 @@
+.TH f_thread_mutex_full_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_full_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_full.h>
+.sp
+\fBf_status_t f_thread_mutex_full_delete\fP(
+    \fBf_thread_mutex_full_t *const \fP\fIfull\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread mutex full.
+.PP
+The pthread_mutex_destroy() and pthread_mutexattr_destroy() functions have no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+When F_mutex (with error bit) is returned, then pthread_condattr_destroy() is not called.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy when calling pthread_mutex_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_mutex_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_mutexattr_destroy(). F_mutex (with error bit) on any error when calling pthread_mutex_destroy().
+.SH PARAMETERS
+.TP
+.B full
+The full to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure of the mutex and its associated attribute.
+.PP
+attribute: The associated attribute.
+.sp
+.RS
+.nf
+\fB
+struct f_thread_mutex_full_t {
+  f_thread_mutex_t           \fImutex\fP;
+  f_thread_mutex_attribute_t \fIattribute\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_full.h\fP(3), \fIf_thread_mutex_full_delete\fP(3), \fIpthread_mutex_destroy()\fP, \fIpthread_mutexattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fulls_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fulls_delete_callback.3
new file mode 100644 (file)
index 0000000..d13b709
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_mutex_fulls_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_fulls_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_fulls.h>
+.sp
+\fBf_status_t f_thread_mutex_fulls_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_mutex_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_mutex (with error bit) is returned, then pthread_mutexattr_destroy() is not called. When F_attribute or F_mutex (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy when calling pthread_mutex_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_mutex_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_mutexattr_destroy(). F_mutex (with error bit) on any error when calling pthread_mutex_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_fulls.h\fP(3), \fIf_thread_mutex_fulls_delete_callback\fP(3), \fIf_thread_mutex_fulls_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_mutex_destroy()\fP, \fIpthread_mutexattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fulls_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fulls_destroy_callback.3
new file mode 100644 (file)
index 0000000..fbc8b08
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_mutex_fulls_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_fulls_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_fulls.h>
+.sp
+\fBf_status_t f_thread_mutex_fulls_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_mutex_fulls_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_mutex (with error bit) is returned, then pthread_mutexattr_destroy() is not called. When F_attribute or F_mutex (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy when calling pthread_mutex_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_mutex_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_mutexattr_destroy(). F_mutex (with error bit) on any error when calling pthread_mutex_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_fulls.h\fP(3), \fIf_thread_mutex_fulls_delete_callback\fP(3), \fIf_thread_mutex_fulls_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_mutex_destroy()\fP, \fIpthread_mutexattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fullss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fullss_delete_callback.3
new file mode 100644 (file)
index 0000000..eb51315
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_mutex_fullss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_fullss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_fullss.h>
+.sp
+\fBf_status_t f_thread_mutex_fullss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_mutex_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_mutex (with error bit) is returned, then pthread_mutexattr_destroy() is not called. When F_attribute or F_mutex (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy when calling pthread_mutex_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_mutex_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_mutexattr_destroy(). F_mutex (with error bit) on any error when calling pthread_mutex_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_fullss.h\fP(3), \fIf_thread_mutex_fullss_delete_callback\fP(3), \fIf_thread_mutex_fullss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIpthread_mutex_destroy()\fP, \fIpthread_mutexattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fullss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_fullss_destroy_callback.3
new file mode 100644 (file)
index 0000000..db6de87
--- /dev/null
@@ -0,0 +1,58 @@
+.TH f_thread_mutex_fullss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_fullss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex_fullss.h>
+.sp
+\fBf_status_t f_thread_mutex_fullss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_mutex_fullss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+When F_mutex (with error bit) is returned, then pthread_mutexattr_destroy() is not called. When F_attribute or F_mutex (with error bits) is returned, then f_memory_array_resize() is not called. On any error, the array is not guaranteed to be completely processed.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy when calling pthread_mutex_destroy(). F_parameter (with error bit) if a parameter is invalid (including parameter error when calling calling pthread_mutex_destroy().
+.PP
+F_attribute (with error bit) on error when calling pthread_mutexattr_destroy(). F_mutex (with error bit) on any error when calling pthread_mutex_destroy().
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex_fullss.h\fP(3), \fIf_thread_mutex_fullss_delete_callback\fP(3), \fIf_thread_mutex_fullss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIpthread_mutex_destroy()\fP, \fIpthread_mutexattr_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock.3
new file mode 100644 (file)
index 0000000..ea28e91
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_mutex_lock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_lock \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_lock\fP(
+    \fBf_thread_mutex_t *const \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the mutex.
+.PP
+This is a blocking function.
+.PP
+Must not be NULL.
+.PP
+F_dead (with error bit) if the owning thread terminated while holding the mutex lock (thread is dead). F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_recover_not (with error bit) if the state protected by the mutex is not recoverable. F_resource_not (with error bit) if max mutex locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mutex
+The thread mutex.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_lock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock_timed.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock_timed.3
new file mode 100644 (file)
index 0000000..3627b6f
--- /dev/null
@@ -0,0 +1,49 @@
+.TH f_thread_mutex_lock_timed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_lock_timed \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_lock_timed\fP(
+    \fBconst f_time_spec_t *const \fP\fItimeout\fP,
+    \fBf_thread_mutex_t *const    \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the mutex, waiting for a set period of time to get the lock if already locked.
+.PP
+If the mutex is already locked and the timeout expires, then the lock attempt fails.
+.PP
+This is a blocking function (until timeout expires).
+.PP
+Must not be NULL.
+.PP
+F_dead (with error bit) if the owning thread terminated while holding the mutex lock (thread is dead). F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation. F_recover_not (with error bit) if the state protected by the mutex is not recoverable. F_resource_not (with error bit) if max mutex locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B timeout
+The timeout.
+
+.TP
+.B mutex
+The thread mutex.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_time if the timeout was reached before obtaining the lock.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_timedlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock_try.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_lock_try.3
new file mode 100644 (file)
index 0000000..2587e05
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_mutex_lock_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_lock_try \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_lock_try\fP(
+    \fBf_thread_mutex_t *const \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to lock the mutex.
+.PP
+If mutex is already locked, return immediately.
+.PP
+This is a non-blocking function.
+.PP
+Must not be NULL.
+.PP
+F_dead (with error bit) if the owning thread terminated while holding the mutex lock (thread is dead). F_parameter (with error bit) if a parameter is invalid. F_recover_not (with error bit) if the state protected by the mutex is not recoverable. F_resource_not (with error bit) if max mutex locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mutex
+The thread mutex.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but the mutex is already locked.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_trylock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_priority_ceiling_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_priority_ceiling_get.3
new file mode 100644 (file)
index 0000000..cd962a4
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_mutex_priority_ceiling_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_priority_ceiling_get \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_priority_ceiling_get\fP(
+    \fBf_thread_mutex_t *const \fP\fImutex\fP,
+    \fBint *const              \fP\fIceiling\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mutex priority ceiling.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mutex
+The thread mutex.
+
+.TP
+.B ceiling
+The priority ceiling.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_getprioceiling()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_priority_ceiling_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_priority_ceiling_set.3
new file mode 100644 (file)
index 0000000..5b6fe64
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_mutex_priority_ceiling_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_priority_ceiling_set \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_priority_ceiling_set\fP(
+    \fBconst int               \fP\fIceiling\fP,
+    \fBf_thread_mutex_t *const \fP\fImutex\fP,
+    \fBint *const              \fP\fIprevious\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the mutex priority ceiling.
+.PP
+Set to NULL to not use.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation. F_recover_not (with error bit) if the state protected by the mutex is not recoverable (for a "robust" mutex). F_resource_not (with error bit) if max mutex locks is reached. F_dead (with error bit) if the owning thread terminated while holding the mutex lock (thread is dead).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B ceiling
+The priority ceiling.
+
+.TP
+.B mutex
+The thread mutex.
+
+.TP
+.B previous
+(optional) The previous priority ceiling.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_setprioceiling()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_unlock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutex_unlock.3
new file mode 100644 (file)
index 0000000..255aa19
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_mutex_unlock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutex_unlock \-
+.SH SYNOPSIS
+.nf
+.B #include <mutex.h>
+.sp
+\fBf_status_t f_thread_mutex_unlock\fP(
+    \fBf_thread_mutex_t *const \fP\fImutex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unlock the mutex.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation (possibly because mutex is not owned by current thread).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B mutex
+The thread mutex.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutex.h\fP(3), \fIf_thread_mutex_consistent\fP(3), \fIf_thread_mutex_create\fP(3), \fIf_thread_mutex_delete\fP(3), \fIf_thread_mutex_lock\fP(3), \fIf_thread_mutex_lock_timed\fP(3), \fIf_thread_mutex_lock_try\fP(3), \fIf_thread_mutex_priority_ceiling_get\fP(3), \fIf_thread_mutex_priority_ceiling_set\fP(3), \fIf_thread_mutex_unlock\fP(3), \fIpthread_mutex_unlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutexs_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutexs_delete_callback.3
new file mode 100644 (file)
index 0000000..c491219
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutexs_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutexs_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutexs.h>
+.sp
+\fBf_status_t f_thread_mutexs_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_mutexs_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutexs.h\fP(3), \fIf_thread_mutexs_delete_callback\fP(3), \fIf_thread_mutexs_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIpthread_mutex_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutexs_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutexs_destroy_callback.3
new file mode 100644 (file)
index 0000000..eed4286
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutexs_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutexs_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutexs.h>
+.sp
+\fBf_status_t f_thread_mutexs_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_mutexs_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutexs.h\fP(3), \fIf_thread_mutexs_delete_callback\fP(3), \fIf_thread_mutexs_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIpthread_mutex_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutexss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutexss_delete_callback.3
new file mode 100644 (file)
index 0000000..fa69577
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutexss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutexss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutexss.h>
+.sp
+\fBf_status_t f_thread_mutexss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_mutexss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutexss.h\fP(3), \fIf_thread_mutexss_delete_callback\fP(3), \fIf_thread_mutexss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIpthread_mutex_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_mutexss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_mutexss_destroy_callback.3
new file mode 100644 (file)
index 0000000..4707dad
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_mutexss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_mutexss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mutexss.h>
+.sp
+\fBf_status_t f_thread_mutexss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_mutexss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if a mutex is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImutexss.h\fP(3), \fIf_thread_mutexss_delete_callback\fP(3), \fIf_thread_mutexss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP, \fIpthread_mutex_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_name_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_name_get.3
new file mode 100644 (file)
index 0000000..afe0035
--- /dev/null
@@ -0,0 +1,75 @@
+.TH f_thread_name_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_name_get \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_name_get\fP(
+    \fBconst f_thread_id_t      \fP\fIid\fP,
+    \fBf_string_static_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the name of the thread.
+.PP
+This uses a non-portal call and may do nothing on systems that do not support custom thread names.
+.PP
+If name.size > 0, then the thread name is appended onto the string at position of name.used and then the name.used is incremented (this is not NULL terminated).
+.PP
+Must not be NULL.
+.PP
+F_buffer_overflow (with error bit) if name is too small to fit the thread name. F_buffer_underflow (with error bit) if name.size > 0 and name.used == name.size or name.size == 0 and name.used == 0. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The thread to name.
+
+.TP
+.B name
+The thread name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_getname_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_name_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_name_set.3
new file mode 100644 (file)
index 0000000..874dc47
--- /dev/null
@@ -0,0 +1,73 @@
+.TH f_thread_name_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_name_set \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_name_set\fP(
+    \fBconst f_thread_id_t     \fP\fIid\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the name of the thread.
+.PP
+This uses a non-portal call and may do nothing on systems that do not support custom thread names.
+.PP
+This must be a NULL terminated string.
+.PP
+F_buffer_overflow (with error bit) If the given name is larged than is allowed for a thread name. F_parameter (with error bit) if a parameter is invalid. F_implement_not (with error bit) if pthread_setname_np() is not available.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The thread to name.
+
+.TP
+.B name
+The thread name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_data_not if name.used is 0 or name.string is NULL. F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_setname_np()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_once.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_once.3
new file mode 100644 (file)
index 0000000..e787267
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_thread_once "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_once \-
+.SH SYNOPSIS
+.nf
+.B #include <once.h>
+.sp
+\fBf_status_t f_thread_once\fP(
+    \fBconst f_void_call_t    \fP\fIroutine\fP,
+    \fBf_thread_once_t *const \fP\fIonce\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Call the given routine only one time and never again.
+.PP
+Subsequent calls will not call the given routine.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B routine
+The callback.
+
+.TP
+.B once
+The once variable designating that the given routine will be called only once.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIonce.h\fP(3), \fIf_thread_once\fP(3), \fIpthread_once()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_parameter_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_parameter_get.3
new file mode 100644 (file)
index 0000000..d45c526
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_thread_scheduler_parameter_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_scheduler_parameter_get \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_scheduler_parameter_get\fP(
+    \fBconst f_thread_id_t       \fP\fIid\fP,
+    \fBint *const                \fP\fIpolicy\fP,
+    \fBstruct sched_param *const \fP\fIparameter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the thread scheduler parameter.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the policy or scheduling parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The thread ID.
+
+.TP
+.B policy
+The scheduler policy Must not be NULL.
+
+.TP
+.B parameter
+The scheduler parameter Must not be NULL.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_getschedparam()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_parameter_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_parameter_set.3
new file mode 100644 (file)
index 0000000..bf3473e
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_thread_scheduler_parameter_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_scheduler_parameter_set \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_scheduler_parameter_set\fP(
+    \fBconst f_thread_id_t             \fP\fIid\fP,
+    \fBconst int                       \fP\fIpolicy\fP,
+    \fBconst struct sched_param *const \fP\fIparameter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the thread scheduler parameter.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if insufficient privileges or scheduler (or policy) does not allow operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The thread ID.
+
+.TP
+.B policy
+The scheduler policy
+
+.TP
+.B parameter
+The scheduler parameter Must not be NULL.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_setschedparam()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_priority_set.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_scheduler_priority_set.3
new file mode 100644 (file)
index 0000000..d15180e
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_thread_scheduler_priority_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_scheduler_priority_set \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_scheduler_priority_set\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP,
+    \fBconst int           \fP\fIpriority\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the thread scheduler priority.
+.PP
+F_found_not (with error bit) no thread by the given ID was found. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if insufficient privileges.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The thread ID.
+
+.TP
+.B priority
+The scheduler priority.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_setschedprio()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_create.3
new file mode 100644 (file)
index 0000000..0f855e3
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_thread_semaphore_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_create \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_create\fP(
+    \fBconst uint8_t               \fP\fIshared\fP,
+    \fBconst unsigned int          \fP\fIvalue\fP,
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread semaphore.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the system does not support the process shared semaphore (shared == true).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B shared
+If TRUE, then the semaphore is shared between processes (stored as posix shared memory, memory mapped, etc..). IF FALSE, then the semphore is shared between threads of a process (stored as a global variable or in the heap). Not all systems support semaphores shared amongst processes.
+
+.TP
+.B value
+The value to initially assign the semaphore on creation.
+
+.TP
+.B semaphore
+The semaphore to create.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_delete.3
new file mode 100644 (file)
index 0000000..71af1bd
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_semaphore_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_delete\fP(
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread semaphore.
+.PP
+The sem_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the semaphore is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B semaphore
+The semaphore to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_close.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_close.3
new file mode 100644 (file)
index 0000000..432c80b
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_semaphore_file_close "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_file_close \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_file_close\fP(
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Close a thread (named) semaphore file.
+.PP
+A named semaphore should be deleted with f_thread_semephore_file_destroy().
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B semaphore
+The semaphore to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_close()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_delete.3
new file mode 100644 (file)
index 0000000..2e8d06e
--- /dev/null
@@ -0,0 +1,66 @@
+.TH f_thread_semaphore_file_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_file_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_file_delete\fP(
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread (named) semaphore.
+.PP
+This deletes the semaphore file and all processes holding this semaphore will be forcibly closed.
+.PP
+F_access_denied (with error bit) on access denied. F_name_not (with error bit) if file name is too long. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The semaphore name to delete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_file_found_not the named file was not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_unlink()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_open.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_file_open.3
new file mode 100644 (file)
index 0000000..bc799b6
--- /dev/null
@@ -0,0 +1,86 @@
+.TH f_thread_semaphore_file_open "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_file_open \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_file_open\fP(
+    \fBconst f_string_static_t      \fP\fIname\fP,
+    \fBconst int                    \fP\fIflag\fP,
+    \fBmode_t *const                \fP\fImode\fP,
+    \fBunsigned int                 \fP\fIvalue\fP,
+    \fBf_thread_semaphore_t **const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Open or create a thread (named) semaphore file.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_file_descriptor_max (with error bit) if max file descrriptors was reached. F_file_found (with error bit) if the file was found and both the O_CREAT and O_EXCL flags are set. F_file_open_max (with error bit) too many open files. F_file_found_not (with error bit) if the file was not found and the O_CREAT is not set. F_name_not (with error bit) if file name is too long. F_parameter (with error bit) if a parameter is invalid. F_support_not (with error bit) if the system does not support the process shared semaphore (shared == true). F_memory_not (with error bit) if out of memory.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B name
+The semaphore file name to create.
+
+.TP
+.B flag
+The file create/open flags. Pass the O_CREATE flag to create the semaphore file.
+
+.TP
+.B mode
+(optional) The file permissions to assign the semaphore. Ignored if O_CREAT is not used in flag. Ignored if the named semaphore already exists. Not optional when O_CREAT flag is set.
+
+.TP
+.B value
+(optional) The value to initially assign the semaphore on creation. Ignored if O_CREAT is not used in flag. Ignored if the named semaphore already exists. Not optional when O_CREAT flag is set. Ignored when mode is NULL.
+
+.TP
+.B semaphore
+The thread semaphore.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_open()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock.3
new file mode 100644 (file)
index 0000000..be1c125
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_semaphore_lock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_lock \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_lock\fP(
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the semaphore.
+.PP
+This is a blocking function.
+.PP
+This causes the semaphore value to decrement.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_interrupt (with error bit) if returned due to an interrupt signal.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B semaphore
+The thread semaphore.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock_timed.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock_timed.3
new file mode 100644 (file)
index 0000000..d380e52
--- /dev/null
@@ -0,0 +1,49 @@
+.TH f_thread_semaphore_lock_timed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_lock_timed \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_lock_timed\fP(
+    \fBconst f_time_spec_t *const  \fP\fItimeout\fP,
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the semaphore, waiting for a set period of time to get the lock if already locked.
+.PP
+If the semaphore is already locked and the timeout expires, then the lock attempt fails.
+.PP
+This is a blocking function (until timeout expires).
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_interrupt (with error bit) if returned due to an interrupt signal.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B timeout
+The timeout.
+
+.TP
+.B semaphore
+The thread semaphore.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_time if the timeout was reached before obtaining the lock.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_timedwait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock_try.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_lock_try.3
new file mode 100644 (file)
index 0000000..f1a53f3
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_semaphore_lock_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_lock_try \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_lock_try\fP(
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to lock the semaphore.
+.PP
+If semaphore is already locked, return immediately.
+.PP
+This is a non-blocking function.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_interrupt (with error bit) if returned due to an interrupt signal. F_resource_not (with error bit) if max semaphore locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B semaphore
+The thread semaphore.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_trywait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_unlock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_unlock.3
new file mode 100644 (file)
index 0000000..aaf3807
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_semaphore_unlock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_unlock \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_unlock\fP(
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unlock the semaphore.
+.PP
+This causes the semaphore value to increment.
+.PP
+Must not be NULL.
+.PP
+F_number_overflow (with error bit) if max semaphore value is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B semaphore
+The thread semaphore.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_post()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_value_get.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphore_value_get.3
new file mode 100644 (file)
index 0000000..fa194c3
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_semaphore_value_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphore_value_get \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphore.h>
+.sp
+\fBf_status_t f_thread_semaphore_value_get\fP(
+    \fBf_thread_semaphore_t *const \fP\fIsemaphore\fP,
+    \fBint *const                  \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the semaphore value.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B semaphore
+The thread semaphore.
+
+.TP
+.B value
+The semaphore's value.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphore.h\fP(3), \fIf_thread_semaphore_create\fP(3), \fIf_thread_semaphore_delete\fP(3), \fIf_thread_semaphore_file_close\fP(3), \fIf_thread_semaphore_file_delete\fP(3), \fIf_thread_semaphore_file_open\fP(3), \fIf_thread_semaphore_lock\fP(3), \fIf_thread_semaphore_lock_timed\fP(3), \fIf_thread_semaphore_lock_try\fP(3), \fIf_thread_semaphore_unlock\fP(3), \fIf_thread_semaphore_value_get\fP(3), \fIsem_getvalue()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphores_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphores_delete_callback.3
new file mode 100644 (file)
index 0000000..d320e1f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_semaphores_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphores_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphores.h>
+.sp
+\fBf_status_t f_thread_semaphores_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_semaphores_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphores.h\fP(3), \fIf_thread_semaphores_delete_callback\fP(3), \fIf_thread_semaphores_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphores_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphores_destroy_callback.3
new file mode 100644 (file)
index 0000000..4cd909a
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_semaphores_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphores_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphores.h>
+.sp
+\fBf_status_t f_thread_semaphores_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_semaphores_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphores.h\fP(3), \fIf_thread_semaphores_delete_callback\fP(3), \fIf_thread_semaphores_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphoress_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphoress_delete_callback.3
new file mode 100644 (file)
index 0000000..11ecfbc
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_semaphoress_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphoress_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphoress.h>
+.sp
+\fBf_status_t f_thread_semaphoress_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_semaphoress_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphoress.h\fP(3), \fIf_thread_semaphoress_delete_callback\fP(3), \fIf_thread_semaphoress_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_semaphoress_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_semaphoress_destroy_callback.3
new file mode 100644 (file)
index 0000000..db3ab13
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_semaphoress_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_semaphoress_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <semaphoress.h>
+.sp
+\fBf_status_t f_thread_semaphoress_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_semaphoress_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsemaphoress.h\fP(3), \fIf_thread_semaphoress_delete_callback\fP(3), \fIf_thread_semaphoress_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_signal_mask.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_signal_mask.3
new file mode 100644 (file)
index 0000000..a4a5fee
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_thread_signal_mask "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_signal_mask \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_signal_mask\fP(
+    \fBconst int             \fP\fIhow\fP,
+    \fBconst sigset_t *const \fP\fInext\fP,
+    \fBsigset_t *const       \fP\fIcurrent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get or assign the current signal set in use.
+.PP
+Either set or previous may be NULL but not both (at least one is required).
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B how
+How to handle the signal. Set this to 0 when only trying to get the current signal set.
+
+.TP
+.B next
+(optional) The new set of signals to handle.
+
+.TP
+.B current
+(optional) The current set of signals being handled.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_sigmask()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_signal_queue.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_signal_queue.3
new file mode 100644 (file)
index 0000000..a8e3ec0
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_thread_signal_queue "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_signal_queue \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_signal_queue\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP,
+    \fBconst int           \fP\fIsignal\fP,
+    \fBconst union sigval  \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send the signal and value to the given thread.
+.PP
+F_found_not (with error bit) if no thread by the given ID was found. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if the max signals is reached. F_support_not (with error bit) if this action is not supported by the current OS.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B id
+The ID of the thread to signal.
+
+.TP
+.B signal
+The signal to send to the thread.
+
+.TP
+.B value
+The signal value to send.
+
+.SH RETURN VALUE
+.PP
+F_okay on success but no signal found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_sigqueue()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_signal_write.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_signal_write.3
new file mode 100644 (file)
index 0000000..c2e1468
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_thread_signal_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_signal_write \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_signal_write\fP(
+    \fBconst f_thread_id_t \fP\fIid\fP,
+    \fBconst int           \fP\fIsignal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Send a signal to the given thread.
+.PP
+F_found_not on success, signal is 0, and the thread by the given ID does not exist. F_found_not (with error bit) if no thread by the given ID was found (and signal is not 0). F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B id
+The ID of the thread to signal.
+
+.TP
+.B signal
+The signal to send to the thread. If 0 is used instead of a valid signal, then instead check to see if the thread exists.
+
+.SH RETURN VALUE
+.PP
+F_okay on success and signal is not 0. F_found on success, signal is 0, and the thread by the given ID does exist.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_kill()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spin_create.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spin_create.3
new file mode 100644 (file)
index 0000000..479b14e
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_thread_spin_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spin_create \-
+.SH SYNOPSIS
+.nf
+.B #include <spin.h>
+.sp
+\fBf_status_t f_thread_spin_create\fP(
+    \fBconst int              \fP\fIshared\fP,
+    \fBf_thread_spin_t *const \fP\fIspin\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a thread spin lock.
+.PP
+Must not be NULL.
+.PP
+F_memory_not (with error bit) if out of memory. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max spines is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B shared
+The shared process setting.
+
+.TP
+.B spin
+The spin to create.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspin.h\fP(3), \fIf_thread_spin_create\fP(3), \fIf_thread_spin_delete\fP(3), \fIf_thread_spin_lock\fP(3), \fIf_thread_spin_lock_try\fP(3), \fIf_thread_spin_unlock\fP(3), \fIpthread_spin_init()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spin_delete.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spin_delete.3
new file mode 100644 (file)
index 0000000..efff4e8
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_spin_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spin_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <spin.h>
+.sp
+\fBf_status_t f_thread_spin_delete\fP(
+    \fBf_thread_spin_t *const \fP\fIspin\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete a thread spin lock.
+.PP
+The pthread_spin_destroy() function has no distinction like the *_destroy() and the *_delete() used by the FLL project. Therefore there is only this function for both deleting and destroying.
+.PP
+Must not be NULL.
+.PP
+F_busy (with error bit) if the spin is busy. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B spin
+The spin to delete.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspin.h\fP(3), \fIf_thread_spin_create\fP(3), \fIf_thread_spin_delete\fP(3), \fIf_thread_spin_lock\fP(3), \fIf_thread_spin_lock_try\fP(3), \fIf_thread_spin_unlock\fP(3), \fIpthread_spin_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spin_lock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spin_lock.3
new file mode 100644 (file)
index 0000000..2d528b6
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_thread_spin_lock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spin_lock \-
+.SH SYNOPSIS
+.nf
+.B #include <spin.h>
+.sp
+\fBf_status_t f_thread_spin_lock\fP(
+    \fBf_thread_spin_t *const \fP\fIspin\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Lock the spin lock.
+.PP
+This is a blocking function.
+.PP
+Must not be NULL.
+.PP
+F_deadlock (with error bit) if operation would cause a deadlock. F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max spin locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B spin
+The thread spin.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspin.h\fP(3), \fIf_thread_spin_create\fP(3), \fIf_thread_spin_delete\fP(3), \fIf_thread_spin_lock\fP(3), \fIf_thread_spin_lock_try\fP(3), \fIf_thread_spin_unlock\fP(3), \fIpthread_spin_lock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spin_lock_try.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spin_lock_try.3
new file mode 100644 (file)
index 0000000..b19e5fc
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_thread_spin_lock_try "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spin_lock_try \-
+.SH SYNOPSIS
+.nf
+.B #include <spin.h>
+.sp
+\fBf_status_t f_thread_spin_lock_try\fP(
+    \fBf_thread_spin_t *const \fP\fIspin\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Try to lock the spin lock.
+.PP
+If spin is already locked, return immediately.
+.PP
+This is a non-blocking function.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_resource_not (with error bit) if max spin locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B spin
+The thread spin.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_busy on success, but the spin is already locked.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspin.h\fP(3), \fIf_thread_spin_create\fP(3), \fIf_thread_spin_delete\fP(3), \fIf_thread_spin_lock\fP(3), \fIf_thread_spin_lock_try\fP(3), \fIf_thread_spin_unlock\fP(3), \fIpthread_spin_trylock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spin_unlock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spin_unlock.3
new file mode 100644 (file)
index 0000000..ae4b1f3
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_spin_unlock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spin_unlock \-
+.SH SYNOPSIS
+.nf
+.B #include <spin.h>
+.sp
+\fBf_status_t f_thread_spin_unlock\fP(
+    \fBf_thread_spin_t *const \fP\fIspin\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unlock the spin lock.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation (possibly because spin is not owned by current thread). F_resource_not (with error bit) if max spin locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B spin
+The thread spin.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspin.h\fP(3), \fIf_thread_spin_create\fP(3), \fIf_thread_spin_delete\fP(3), \fIf_thread_spin_lock\fP(3), \fIf_thread_spin_lock_try\fP(3), \fIf_thread_spin_unlock\fP(3), \fIpthread_spin_unlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spins_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spins_delete_callback.3
new file mode 100644 (file)
index 0000000..04c63c0
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_spins_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spins_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <spins.h>
+.sp
+\fBf_status_t f_thread_spins_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_spins_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspins.h\fP(3), \fIf_thread_spins_delete_callback\fP(3), \fIf_thread_spins_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spins_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spins_destroy_callback.3
new file mode 100644 (file)
index 0000000..6f2b3f6
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_spins_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spins_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <spins.h>
+.sp
+\fBf_status_t f_thread_spins_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_spins_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspins.h\fP(3), \fIf_thread_spins_delete_callback\fP(3), \fIf_thread_spins_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spinss_delete_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spinss_delete_callback.3
new file mode 100644 (file)
index 0000000..4addedd
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_spinss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spinss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <spinss.h>
+.sp
+\fBf_status_t f_thread_spinss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_thread_spinss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspinss.h\fP(3), \fIf_thread_spinss_delete_callback\fP(3), \fIf_thread_spinss_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_spinss_destroy_callback.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_spinss_destroy_callback.3
new file mode 100644 (file)
index 0000000..55bbebf
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_thread_spinss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_spinss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <spinss.h>
+.sp
+\fBf_status_t f_thread_spinss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_thread_spinss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIspinss.h\fP(3), \fIf_thread_spinss_delete_callback\fP(3), \fIf_thread_spinss_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_thread/data/documentation/man/man3/f_thread_unlock.3 b/level_0/f_thread/data/documentation/man/man3/f_thread_unlock.3
new file mode 100644 (file)
index 0000000..607f18f
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_thread_unlock "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_thread_unlock \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBf_status_t f_thread_unlock\fP(
+    \fBf_thread_lock_t *const \fP\fIlock\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unlock the read/write lock.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not allowed to perform the operation (possibly because lock is not owned by current thread). F_resource_not (with error bit) if max lock locks is reached.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B lock
+The thread lock.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIf_thread_at_fork\fP(3), \fIf_thread_caller\fP(3), \fIf_thread_cancel\fP(3), \fIf_thread_cancel_state_set\fP(3), \fIf_thread_cancel_test\fP(3), \fIf_thread_cancel_type_set\fP(3), \fIf_thread_clock_get_id\fP(3), \fIf_thread_compare\fP(3), \fIf_thread_create\fP(3), \fIf_thread_detach\fP(3), \fIf_thread_exit\fP(3), \fIf_thread_join\fP(3), \fIf_thread_join_timed\fP(3), \fIf_thread_join_try\fP(3), \fIf_thread_name_get\fP(3), \fIf_thread_name_set\fP(3), \fIf_thread_scheduler_parameter_get\fP(3), \fIf_thread_scheduler_parameter_set\fP(3), \fIf_thread_scheduler_priority_set\fP(3), \fIf_thread_signal_mask\fP(3), \fIf_thread_signal_queue\fP(3), \fIf_thread_signal_write\fP(3), \fIf_thread_unlock\fP(3), \fIpthread_rwlock_unlock()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_calendar_string.3 b/level_0/f_time/data/documentation/man/man3/f_time_calendar_string.3
new file mode 100644 (file)
index 0000000..2fde8c0
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_time_calendar_string "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_calendar_string \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_calendar_string\fP(
+    \fBconst time_t              \fP\fItime\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the given time into a calendar-time string.
+.PP
+Must not be NULL.
+.PP
+F_buffer_overflow (with error bit) on buffer overflow.
+.PP
+Errors (with error bit) from: f_string_append().
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time to convert.
+
+.TP
+.B destination
+The calendar string representation of the given time.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIf_string_append()\fP, \fIctime_r()\fP, \fIf_string_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_calendar_string_part.3 b/level_0/f_time/data/documentation/man/man3/f_time_calendar_string_part.3
new file mode 100644 (file)
index 0000000..b7dad43
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_time_calendar_string_part "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_calendar_string_part \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_calendar_string_part\fP(
+    \fBconst f_time_part_t       \fP\fIpart\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the given time into a calendar-time string from a broken up (part) date and time.
+.PP
+Must not be NULL.
+.PP
+F_buffer_overflow (with error bit) on buffer overflow.
+.PP
+Errors (with error bit) from: f_string_append().
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B part
+The time parts to convert.
+
+.TP
+.B destination
+The calendar string representation of the given time.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIf_string_append()\fP, \fIasctime_r()\fP, \fIf_string_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_clock_get.3 b/level_0/f_time/data/documentation/man/man3/f_time_clock_get.3
new file mode 100644 (file)
index 0000000..502a461
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_time_clock_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_clock_get \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_clock_get\fP(
+    \fBconst clockid_t      \fP\fIcode\fP,
+    \fBf_time_spec_t *const \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current seconds and nanoseconds from the system clock.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_buffer_overflow (with error bit) if the time stamp does not fit in the time range. F_device_not (with error bit) if the system clock is no onger available (such as when a hot-pluggable clock disappears). F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not permitted to perform this operation. F_support_not (with error bit) if the operation specified by the code is not supported by the clock.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B code
+Designates how to get the time from the system clock.
+
+.TP
+.B time
+The time retrieved.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIclock_gettime()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_clock_precision.3 b/level_0/f_time/data/documentation/man/man3/f_time_clock_precision.3
new file mode 100644 (file)
index 0000000..9179254
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_time_clock_precision "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_clock_precision \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_clock_precision\fP(
+    \fBconst clockid_t      \fP\fIcode\fP,
+    \fBf_time_spec_t *const \fP\fIprecision\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the precision from the system clock.
+.PP
+Must not be NULL.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_buffer_overflow (with error bit) if the time stamp does not fit in the time range. F_device_not (with error bit) if the system clock is no onger available (such as when a hot-pluggable clock disappears). F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not permitted to perform this operation. F_support_not (with error bit) if the operation specified by the code is not supported by the clock.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B code
+Designates how to get the time from the system clock.
+
+.TP
+.B precision
+The clock precision (clock resolution).
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIclock_getres()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_clock_set.3 b/level_0/f_time/data/documentation/man/man3/f_time_clock_set.3
new file mode 100644 (file)
index 0000000..71a6ee3
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_time_clock_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_clock_set \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_clock_set\fP(
+    \fBconst clockid_t     \fP\fIcode\fP,
+    \fBconst f_time_spec_t \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the current seconds and nanoseconds from the system clock.
+.PP
+F_access_denied (with error bit) on access denied. F_buffer (with error bit) if the buffer is invalid. F_buffer_overflow (with error bit) if the time stamp does not fit in the time range. F_device_not (with error bit) if the system clock is no onger available (such as when a hot-pluggable clock disappears). F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if not permitted to perform this operation. F_support_not (with error bit) if the operation specified by the code is not supported by the clock.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B code
+Designates how to set the time of the system clock.
+
+.TP
+.B time
+The time to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIclock_settime()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_epoch_get.3 b/level_0/f_time/data/documentation/man/man3/f_time_epoch_get.3
new file mode 100644 (file)
index 0000000..8315f7d
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_time_epoch_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_epoch_get \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_epoch_get\fP(
+    \fBtime_t *const \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current time in seconds since epoch.
+.PP
+Must not be NULL.
+.PP
+F_buffer (with error bit) if the buffer is invalid. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time retrieved.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fItime()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_local_get.3 b/level_0/f_time/data/documentation/man/man3/f_time_local_get.3
new file mode 100644 (file)
index 0000000..9abb777
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_time_local_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_local_get \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_local_get\fP(
+    \fBconst time_t         \fP\fItime\fP,
+    \fBf_time_part_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the given time into local time parts.
+.PP
+Must not be NULL.
+.PP
+F_buffer_overflow (with error bit) on buffer overflow.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time to convert.
+
+.TP
+.B destination
+The time parts.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIlocaltime_r()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_of_day_get.3 b/level_0/f_time/data/documentation/man/man3/f_time_of_day_get.3
new file mode 100644 (file)
index 0000000..328f389
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_time_of_day_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_of_day_get \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_of_day_get\fP(
+    \fBf_time_value_t *const \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the current time of day.
+.PP
+Must not be NULL.
+.PP
+F_buffer (with error bit) if the buffer is invalid. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the file system does not permit this operation.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time retrieved.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIgettimeofday()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_of_day_set.3 b/level_0/f_time/data/documentation/man/man3/f_time_of_day_set.3
new file mode 100644 (file)
index 0000000..1d631ee
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_time_of_day_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_of_day_set \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_of_day_set\fP(
+    \fBconst f_time_value_t \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the current time of day.
+.PP
+F_number_overflow (with error bit) if the summation of seconds and nanoseconds results in an overflow when cast to appropriate integer type. F_number_underflow (with error bit) if the second or nanoseconds is less than 0 when cast to appropriate integer type. F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time to set.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIsettimeofday()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_simpless_delete_callback.3 b/level_0/f_time/data/documentation/man/man3/f_time_simpless_delete_callback.3
new file mode 100644 (file)
index 0000000..0b3c827
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_time_simpless_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_simpless_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_simpless_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_time_simpless_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_simpless_delete_callback\fP(3), \fIf_time_simpless_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_simpless_destroy_callback.3 b/level_0/f_time/data/documentation/man/man3/f_time_simpless_destroy_callback.3
new file mode 100644 (file)
index 0000000..af8a348
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_time_simpless_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_simpless_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_simpless_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_time_simpless_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_simpless_delete_callback\fP(3), \fIf_time_simpless_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_arrays_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_sleep_spec.3 b/level_0/f_time/data/documentation/man/man3/f_time_sleep_spec.3
new file mode 100644 (file)
index 0000000..02a88f4
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_time_sleep_spec "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_sleep_spec \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_sleep_spec\fP(
+    \fBconst f_time_spec_t  \fP\fItime\fP,
+    \fBf_time_spec_t *const \fP\fIremaining\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Sleep a given amount of time specified by the f_time_spec_t.
+.PP
+Set to NULL to not use.
+.PP
+F_buffer (with error bit) if failed to copy data from user space. F_parameter (with error bit) if a parameter is invalid (such as tv_nsec is not in range 0 to 999999999 or tv_sec is negative).
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time to sleep (in seconds and nanoseconds).
+
+.TP
+.B remaining
+(optional) Contains the remaining time if stopped on interrupt.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_interrupt if interrupted by a signal.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIf_time_spec_t\fP, \fInanosleep()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_spec_millisecond.3 b/level_0/f_time/data/documentation/man/man3/f_time_spec_millisecond.3
new file mode 100644 (file)
index 0000000..0a88e2d
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_time_spec_millisecond "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_spec_millisecond \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_spec_millisecond\fP(
+    \fBconst f_number_unsigned_t \fP\fIsecond\fP,
+    \fBconst f_number_unsigned_t \fP\fImillisecond\fP,
+    \fBf_time_spec_t *const      \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a timespec representing the given seconds and milliseconds.
+.PP
+The "f_time_spec_t" may have different lengths and so this function provides overflow and underflow protection. The "f_time_simple_t" should not need this as "f_time_simple_t" is intended to always be uint64_t.
+.PP
+This is still updated on F_number_overflow, and the result of the overflow is still assigned to seconds. This is still updated on F_number_underflow, but the underflow value is set to 0.
+.PP
+F_number_overflow (with error bit) if the summation of seconds and milliseconds results in an overflow when cast to appropriate integer type. F_number_underflow (with error bit) if the seconds or milliseconds is less than 0 when cast to appropriate integer type. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B second
+The number of seconds.
+
+.TP
+.B millisecond
+The number of milliseconds.
+
+.TP
+.B time
+The time spec representing the given seconds and milliseconds.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_spec_nanosecond.3 b/level_0/f_time/data/documentation/man/man3/f_time_spec_nanosecond.3
new file mode 100644 (file)
index 0000000..7b6ea08
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_time_spec_nanosecond "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_spec_nanosecond \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_spec_nanosecond\fP(
+    \fBconst f_number_unsigned_t \fP\fIsecond\fP,
+    \fBconst f_number_unsigned_t \fP\fInanosecond\fP,
+    \fBf_time_spec_t *const      \fP\fItime\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a timespec representing the given seconds and nanoseconds.
+.PP
+The "f_time_spec_t" may have different lengths and so this function provides overflow and underflow protection. The "f_time_simple_t" should not need this as "f_time_simple_t" is intended to always be uint64_t.
+.PP
+This is still updated on F_number_overflow, and the result of the overflow is still assigned to second. This is still updated on F_number_underflow, but the underflow value is set to 0.
+.PP
+F_number_overflow (with error bit) if the summation of seconds and nanoseconds results in an overflow when cast to appropriate integer type. F_number_underflow (with error bit) if the second or nanoseconds is less than 0 when cast to appropriate integer type. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B second
+The number of seconds.
+
+.TP
+.B nanosecond
+The number of nanoseconds.
+
+.TP
+.B time
+The time spec representing the given seconds and nanoseconds.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_time/data/documentation/man/man3/f_time_utc_get.3 b/level_0/f_time/data/documentation/man/man3/f_time_utc_get.3
new file mode 100644 (file)
index 0000000..f64d396
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_time_utc_get "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_time_utc_get \-
+.SH SYNOPSIS
+.nf
+.B #include <time.h>
+.sp
+\fBf_status_t f_time_utc_get\fP(
+    \fBconst time_t         \fP\fItime\fP,
+    \fBf_time_part_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the given time into UTC time parts.
+.PP
+Must not be NULL.
+.PP
+F_buffer_overflow (with error bit) on buffer overflow.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B time
+The time to convert.
+
+.TP
+.B destination
+The time parts.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItime.h\fP(3), \fIf_time_calendar_string\fP(3), \fIf_time_calendar_string_part\fP(3), \fIf_time_clock_get\fP(3), \fIf_time_clock_precision\fP(3), \fIf_time_clock_set\fP(3), \fIf_time_epoch_get\fP(3), \fIf_time_local_get\fP(3), \fIf_time_of_day_get\fP(3), \fIf_time_of_day_set\fP(3), \fIf_time_sleep_spec\fP(3), \fIf_time_spec_millisecond\fP(3), \fIf_time_spec_nanosecond\fP(3), \fIf_time_utc_get\fP(3), \fIgmtime_r()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_buffer_decrement.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_buffer_decrement.3
new file mode 100644 (file)
index 0000000..71f21da
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_utf_buffer_decrement "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_buffer_decrement \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_utf_buffer_decrement\fP(
+    \fBconst f_string_static_t   \fP\fIbuffer\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBconst f_number_unsigned_t \fP\fIstep\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Continue to the previous character, based on step and character width.
+.PP
+For navigating a range within the given buffer by a specific number of characters that could be of any width allowed by UTF-8.
+.PP
+The start position must be at the start of a valid UTF-8 block.
+.PP
+F_complete_not_utf_eos (with error bit) if the end of buffer is reached before the complete UTF-8 character can be processed. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start and stop positions to be incremented. The start position will be incremented by step.
+
+.TP
+.B step
+The number of steps to decrement the start position. The steps refer to characters and not integers. Essentially this number is considered against the width of every character found. (For ASCII each step would be sizeof(uint8_t), which is 1. (For UTF-8 character of width 3, each step would be (3 * sizeof(uint8_t)).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop if the stop range is reached before all steps are completed. F_okay_eos if the end of buffer is reached before all steps are completed. F_data_not if buffer is empty or out of range.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_utf_buffer_decrement\fP(3), \fIf_utf_buffer_increment\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_buffer_increment.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_buffer_increment.3
new file mode 100644 (file)
index 0000000..e8038ac
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_utf_buffer_increment "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_buffer_increment \-
+.SH SYNOPSIS
+.nf
+.B #include <utf.h>
+.sp
+\fBf_status_t f_utf_buffer_increment\fP(
+    \fBconst f_string_static_t   \fP\fIbuffer\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBconst f_number_unsigned_t \fP\fIstep\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Continue to the next character, based on step and character width.
+.PP
+For navigating a range within the given buffer by a specific number of characters that could be of any width allowed by UTF-8.
+.PP
+The start position must be at the start of a valid UTF-8 block.
+.PP
+F_complete_not_utf_stop (with error bit) if the stop range is reached before the complete UTF-8 character can be processed. F_complete_not_utf_eos (with error bit) if the end of buffer is reached before the complete UTF-8 character can be processed. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start and stop positions to be incremented. The start position will be incremented by step.
+
+.TP
+.B step
+The number of steps to increment the start position. The steps refer to characters and not integers. Essentially this number is considered against the width of every character found. (For ASCII each step would be sizeof(uint8_t), which is 1. (For UTF-8 character of width 3, each step would be (3 * sizeof(uint8_t)).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop if the stop range is reached before all steps are completed. F_okay_eos if the end of buffer is reached before all steps are completed. F_data_not if buffer is empty or out of range.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf.h\fP(3), \fIf_utf_buffer_decrement\fP(3), \fIf_utf_buffer_increment\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_char_to_char.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_char_to_char.3
new file mode 100644 (file)
index 0000000..e1369bd
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_utf_char_to_char "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_char_to_char \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_char_to_char\fP(
+    \fBconst f_utf_char_t    \fP\fIutf_character\fP,
+    \fBf_string_t           *\fP\fIcharacter\fP,
+    \fBf_number_unsigned_t  *\fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a specialized f_utf_char_t type to a uint8_t, stored as a string (character buffer).
+.PP
+This will also convert ASCII characters stored in the utf_character array. This will not resize character.
+.PP
+F_failure (with error bit) if width is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B utf_character
+The UTF-8 character to convert from.
+
+.TP
+.B character
+A uint8_t representation of the UTF-8 character, stored as a string of width bytes. If width_max is 0, then this should be set to 0.
+
+.TP
+.B width_max
+This is set to the max number of bytes available. This is then updated to represent the max bytes used if enough space is available.
+
+.SH RETURN VALUE
+.PP
+F_okay if conversion was successful.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3), \fIf_utf_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_char_to_character.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_char_to_character.3
new file mode 100644 (file)
index 0000000..d5d9bc7
--- /dev/null
@@ -0,0 +1,46 @@
+.TH f_utf_char_to_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_char_to_character \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_char_to_character\fP(
+    \fBconst f_string_t          \fP\fIcharacter\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBf_utf_char_t             *\fP\fIcharacter_utf\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert an ASCII or UTF-8 character, stored as a string (character buffer), to the specialized f_utf_char_t type.
+.PP
+F_failure (with error bit) if width is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B character
+The character string to be converted to the f_utf_char_t type. There must be enough space allocated to convert against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for converting. Can be anything greater than 0.
+
+.TP
+.B character_utf
+The generated character of type f_utf_char_t. This value may be cleared, even on error.
+
+.SH RETURN VALUE
+.PP
+F_okay if conversion was successful.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3), \fIf_utf_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is.3
new file mode 100644 (file)
index 0000000..e13a854
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a non-ASCII UTF-8 character.
+.PP
+This does not validate if the UTF-8 character is a valid UTF-8 character, for that use f_utf_character_is_valid().
+.PP
+F_utf_fragment if this is a UTF-8 character fragment.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 character. F_false if not a UTF-8 character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIf_utf_character_is_valid()\fP, \fIf_utf_character_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic.3
new file mode 100644 (file)
index 0000000..ee58e43
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_alphabetic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_alphabetic \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_alphabetic\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabet character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 alphabet character. F_false if not a UTF-8 alphabet character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic_digit.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic_digit.3
new file mode 100644 (file)
index 0000000..66f6183
--- /dev/null
@@ -0,0 +1,49 @@
+.TH f_utf_character_is_alphabetic_digit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_alphabetic_digit \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_alphabetic_digit\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP,
+    \fBuint64_t *const    \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabet or digit character.
+.PP
+Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
+.PP
+This does not include fractions such as 1/2 (½) (U+00BD).
+.PP
+This also processes large values such as Roman Numerals. Roman Numerals, however, conflict with traditional alphabetic characters. To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits. For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
+.PP
+Set to NULL to not use.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.TP
+.B value
+(optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 alphabetic-decimal character. F_false if not a UTF-8 alphabetic-decimal character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic_numeric.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_alphabetic_numeric.3
new file mode 100644 (file)
index 0000000..3eeceb9
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_alphabetic_numeric "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_alphabetic_numeric \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_alphabetic_numeric\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or numeric character.
+.PP
+Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) (U+00BD) or superscript 2 (²) (U+00B2).
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 alpha-numeric character. F_false if not a UTF-8 alpha-numeric character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_ascii.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_ascii.3
new file mode 100644 (file)
index 0000000..aae0333
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_ascii "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_ascii \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_ascii\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII character.
+.PP
+This does not validate whether the UTF-8 character is valid or not.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if an ASCII character. F_false if not an ASCII character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_combining.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_combining.3
new file mode 100644 (file)
index 0000000..56d4fa4
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_combining "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_combining \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_combining\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 combining character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 combining character. F_false if not a UTF-8 combining character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control.3
new file mode 100644 (file)
index 0000000..ee5c732
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_utf_character_is_control "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_control \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_control\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 control character.
+.PP
+This includes control code and control format characters.
+.PP
+The control codes U+0009..U+000D and U+0085 are considered white space and line breaking.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control character. F_false if not a UTF-8 control character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIiscntrl()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_code.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_code.3
new file mode 100644 (file)
index 0000000..eef7426
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_utf_character_is_control_code "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_control_code \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_control_code\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 control code character.
+.PP
+Control Code characters are the traditional control characters, such as "\n" as well as some newer Unicode ones.
+.PP
+This does not include Control format characters.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control code character. F_false if not a UTF-8 control code character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIiscntrl()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_format.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_format.3
new file mode 100644 (file)
index 0000000..3bb5b63
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_control_format "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_control_format \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_control_format\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 control format character.
+.PP
+Control Format characters are special characters used for formatting. These are considered control characters.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control format character. F_false if not a UTF-8 control format character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_picture.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_control_picture.3
new file mode 100644 (file)
index 0000000..2406a41
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_control_picture "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_control_picture \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_control_picture\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 control picture character.
+.PP
+Control Picture characters are placeholders for special ASCII characters and therefore there are no ASCII Control Picture characters.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control picture character. F_false if not a UTF-8 control picture character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_digit.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_digit.3
new file mode 100644 (file)
index 0000000..1cffcc2
--- /dev/null
@@ -0,0 +1,49 @@
+.TH f_utf_character_is_digit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_digit \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_digit\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP,
+    \fBuint64_t *const    \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 digit character.
+.PP
+Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
+.PP
+This does not include fractions such as 1/2 (½) (U+00BD).
+.PP
+This also processes large values such as Roman Numerals. Roman Numerals, however, conflict with traditional alphabetic characters. To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits. For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
+.PP
+Set to NULL to not use.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.TP
+.B value
+(optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 decimal character. F_false if not a UTF-8 decimal character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_emoji.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_emoji.3
new file mode 100644 (file)
index 0000000..84f4635
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_emoji "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_emoji \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_emoji\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 emoji character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 emoji character. F_false if not a UTF-8 emoji character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_fragment.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_fragment.3
new file mode 100644 (file)
index 0000000..6090b30
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_utf_character_is_fragment "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_fragment \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_fragment\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a 1-width UTF-8 character fragment.
+.PP
+Characters whose width is 1-byte are invalid. However, the character could have been cut-off, so whether or not this is actually valid should be determined by the caller.
+.PP
+For normal validation functions, try using f_utf_character_is() or f_utf_character_is_valid().
+.PP
+According to rfc3629, the valid octect sequences for UTF-8 are: UTF8-octets = *( UTF8-char ) UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 UTF8-1 = x00-7F UTF8-2 = xC2-DF UTF8-tail UTF8-3 = xE0 xA0-BF UTF8-tail / xE1-EC 2( UTF8-tail ) / xED x80-9F UTF8-tail / xEE-EF 2( UTF8-tail ) UTF8-4 = xF0 x90-BF 2( UTF8-tail ) / xF1-F3 3( UTF8-tail ) / xF4 x80-8F 2( UTF8-tail ) UTF8-tail = x80-BF
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 character. F_false if not a UTF-8 character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIf_utf_character_is()\fP, \fIf_utf_character_is_valid()\fP, \fIf_utf_character_is()\fP, \fIf_utf_character_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_graph.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_graph.3
new file mode 100644 (file)
index 0000000..e5df709
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_graph\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 printable character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 graph. F_false if not a UTF-8 graph.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIisgraph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_numeric.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_numeric.3
new file mode 100644 (file)
index 0000000..1b49bab
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_numeric "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_numeric \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_numeric\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 numeric character.
+.PP
+Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) or superscript 2 (²).
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 numeric character. F_false if not a UTF-8 numeric character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_phonetic.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_phonetic.3
new file mode 100644 (file)
index 0000000..91be427
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_phonetic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_phonetic \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_phonetic\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 phonetic character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 phonetic character. F_false if not a UTF-8 phonetic character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_private.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_private.3
new file mode 100644 (file)
index 0000000..0c2537c
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_private "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_private \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_private\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 private character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 private character. F_false if not a UTF-8 private character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_punctuation.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_punctuation.3
new file mode 100644 (file)
index 0000000..566938c
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_punctuation "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_punctuation \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_punctuation\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 punctuation character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 punctuation character. F_false if not a UTF-8 punctuation character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_subscript.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_subscript.3
new file mode 100644 (file)
index 0000000..0fef4bf
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_subscript "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_subscript \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_subscript\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 subscript character.
+.PP
+This does not treat any combining character as a subscript.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 subscript character. F_false if not a UTF-8 subscript character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_superscript.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_superscript.3
new file mode 100644 (file)
index 0000000..421513c
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_superscript "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_superscript \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_superscript\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 superscript character.
+.PP
+This does not treat any combining character as a superscript.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 superscript character. F_false if not a UTF-8 superscript character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_symbol.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_symbol.3
new file mode 100644 (file)
index 0000000..a6fae12
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_character_is_symbol "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_symbol \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_symbol\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 symbol character.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 symbol character. F_false if not a UTF-8 symbol character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_unassigned.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_unassigned.3
new file mode 100644 (file)
index 0000000..428d933
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_utf_character_is_unassigned "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_unassigned \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_unassigned\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a unassigned (well-formed) UTF-8 character.
+.PP
+The Surrogates (which are not valid UTF-8) and Private Use are not considered unassigned.
+.PP
+This does validate if the UTF-8 character is a unassigned UTF-8 character. To not do this, use f_utf_character_is().
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The character to unassignedate.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 unassigned character. F_false if not a UTF-8 unassigned character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIf_utf_character_is()\fP, \fIf_utf_character_is()\fP, \fIf_utf_character_is_fragment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_valid.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_valid.3
new file mode 100644 (file)
index 0000000..f15ed3e
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_utf_character_is_valid "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_valid \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_valid\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a valid (well-formed) UTF-8 character.
+.PP
+This does validate if the UTF-8 character is a valid UTF-8 character. To not do this, use f_utf_character_is().
+.PP
+ASCII character codes are considered valid by this function.
+.PP
+Codes U+FDD0 to U+FDEF and any character ending in FFFE or FFFF are non-characters, and are therefore invalid.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 character. F_false if not a UTF-8 character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIf_utf_character_is()\fP, \fIf_utf_character_is()\fP, \fIf_utf_character_is_fragment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace.3
new file mode 100644 (file)
index 0000000..5b77ff1
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_utf_character_is_whitespace "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_whitespace \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_whitespace\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP,
+    \fBconst uint8_t      \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 general space character.
+.PP
+Non-printing or zero-width characters are not considered white space. This does include line separators like '
+.PP
+' (U+000A). This does not include phonetic spaces, like white space modifiers. This does not include non-true white space characters, such as Ogham Space Mark ' ' (U+1680).
+.PP
+Phonetic spaces are whitespaces with additional phonetic meaning associated with them. However, because they are not renderred as white space, they are technically not white space.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-white space characters that are treated as white space by Unicode are not treated as white space.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 white space. F_false if not a UTF-8 white space.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3), \fIisspace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_modifier.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_modifier.3
new file mode 100644 (file)
index 0000000..ca1d431
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_utf_character_is_whitespace_modifier "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_whitespace_modifier \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_whitespace_modifier\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 white space modifier character.
+.PP
+These are phonetic spaces.
+.PP
+Phonetic spaces are whitespaces with additional phonetic meaning associated with them. Therefore, these are valid spaces in the technical sense, even if they are not visibly white space.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 (modifier) white space character. F_false if not a UTF-8 (modifier) white space character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_other.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_other.3
new file mode 100644 (file)
index 0000000..15ab1cb
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_whitespace_other "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_whitespace_other \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_whitespace_other\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an other type of UTF-8 space character.
+.PP
+This is a list of white space that are not actual white space (because they are graph characters) but are considered white space, such as Ogham Space Mark ' ' (U+1680).
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 (other) white space. F_false if not a UTF-8 (other) white space.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_zero_width.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_whitespace_zero_width.3
new file mode 100644 (file)
index 0000000..a2cb6ba
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_whitespace_zero_width "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_whitespace_zero_width \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_whitespace_zero_width\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an other type of UTF-8 space character.
+.PP
+This is a list of white space that are actually zero-width space (which is not a space), such as Zero-Width Space (U+200B).
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 (zero-width) white space. F_false if not a UTF-8 (zero-width) white space.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_wide.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_wide.3
new file mode 100644 (file)
index 0000000..aae6ff5
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_wide "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_wide \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_wide\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get whether or not the UTF-8 character is a wide character on display.
+.PP
+This is not the wide as in width in bytes that the codepoint takes up in UTF-8. Instead, this is the width in characters on the screen the character takes up. When "wide" characters that take up either 2 characters on render. When "narrow" characters that take up either 1 character on render.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The (UTF-8) character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 wide character. F_false if not a UTF-8 wide character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word.3
new file mode 100644 (file)
index 0000000..ae1fbc1
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_character_is_word "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_word \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_word\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP,
+    \fBconst uint8_t      \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 word character.
+.PP
+A word character is alpha-numeric or an underscore '_'.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-inline punctuation connectors are not considered a character (such as U+FE33 '︳'). When FALSE, zero-width punctuation characters are not considered a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 word character. F_false if not a UTF-8 word character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word_dash.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word_dash.3
new file mode 100644 (file)
index 0000000..7c5c59d
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_utf_character_is_word_dash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_word_dash \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_word_dash\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP,
+    \fBconst uint8_t      \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 word or dash character.
+.PP
+A word dash character is alpha-numeric, an underscore '_' or a dash '-'.
+.PP
+Unicode appears to refer to dashes that connect words as a hyphen. Therefore, only these hyphens are considered dashes for the purposes of this function. All other dash-like Unicode characters are not considered a dash here. The dash here is intended for combining words, which matches the context of the Unicode "hyphen".
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-inline punctuation connectors are not considered a character (such as U+FE33 '︳'). When FALSE, zero-width punctuation characters are not considered a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 word or dash character. F_false if not a UTF-8 word or dash character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word_dash_plus.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_word_dash_plus.3
new file mode 100644 (file)
index 0000000..987faf6
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_utf_character_is_word_dash_plus "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_word_dash_plus \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_word_dash_plus\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP,
+    \fBconst uint8_t      \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 word, dash, or plus character.
+.PP
+A word dash plus character is alphabetic-decimal, an underscore '_', a dash '-', or a plus '+'.
+.PP
+Unicode appears to refer to dashes that connect words as a hyphen. Therefore, only these hyphens are considered dashes for the purposes of this function. All other dash-like Unicode characters are not considered a dash here. The dash here is intended for combining words, which matches the context of the Unicode "hyphen".
+.PP
+This does not include zero-width punctuation, such as "invisible plus" (U+2064) (even in strict mode).
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-inline punctuation connectors are not considered a character (such as U+FE33 '︳'). When FALSE, zero-width punctuation characters are not considered a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 word or dash character. F_false if not a UTF-8 word or dash character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_zero_width.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_is_zero_width.3
new file mode 100644 (file)
index 0000000..b3dce77
--- /dev/null
@@ -0,0 +1,38 @@
+.TH f_utf_character_is_zero_width "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_is_zero_width \-
+.SH SYNOPSIS
+.nf
+.B #include <is_character.h>
+.sp
+\fBf_status_t f_utf_character_is_zero_width\fP(
+    \fBconst f_utf_char_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 general non-printing character.
+.PP
+Only characters that do not print, which are generally called zero-width.
+.PP
+F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 non-printing or zero-width character. F_false if not a UTF-8 non-printing or zero-width character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis_character.h\fP(3), \fIf_utf_character_is\fP(3), \fIf_utf_character_is_alphabetic\fP(3), \fIf_utf_character_is_alphabetic_digit\fP(3), \fIf_utf_character_is_alphabetic_numeric\fP(3), \fIf_utf_character_is_ascii\fP(3), \fIf_utf_character_is_combining\fP(3), \fIf_utf_character_is_control\fP(3), \fIf_utf_character_is_control_code\fP(3), \fIf_utf_character_is_control_format\fP(3), \fIf_utf_character_is_control_picture\fP(3), \fIf_utf_character_is_digit\fP(3), \fIf_utf_character_is_emoji\fP(3), \fIf_utf_character_is_fragment\fP(3), \fIf_utf_character_is_graph\fP(3), \fIf_utf_character_is_numeric\fP(3), \fIf_utf_character_is_phonetic\fP(3), \fIf_utf_character_is_private\fP(3), \fIf_utf_character_is_punctuation\fP(3), \fIf_utf_character_is_subscript\fP(3), \fIf_utf_character_is_superscript\fP(3), \fIf_utf_character_is_symbol\fP(3), \fIf_utf_character_is_unassigned\fP(3), \fIf_utf_character_is_valid\fP(3), \fIf_utf_character_is_whitespace\fP(3), \fIf_utf_character_is_whitespace_modifier\fP(3), \fIf_utf_character_is_whitespace_other\fP(3), \fIf_utf_character_is_whitespace_zero_width\fP(3), \fIf_utf_character_is_wide\fP(3), \fIf_utf_character_is_word\fP(3), \fIf_utf_character_is_word_dash\fP(3), \fIf_utf_character_is_word_dash_plus\fP(3), \fIf_utf_character_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_from.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_from.3
new file mode 100644 (file)
index 0000000..0ce8fc0
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_character_unicode_from "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_unicode_from \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_character_unicode_from\fP(
+    \fBconst uint32_t \fP\fIunicode\fP,
+    \fBf_utf_char_t  *\fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a given Unicode into (UTF-8) character.
+.PP
+The f_utf_char_t is a 32-bit integer containing UTF-8 sequences, unchanged. The Unicode is a 32-bit integer representing the Unicode (such as U+0001). The Unciode does not need to be interpretted like UTF-8, it simple is a sequence of number from 0 onto max supported Unicode integer value (U+10FFFF).
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B unicode
+The Unicode number.
+
+.TP
+.B character
+The (UTF-8) character.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3), \fIf_utf_char_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_string_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_string_to.3
new file mode 100644 (file)
index 0000000..18a1935
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_utf_character_unicode_string_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_unicode_string_to \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_character_unicode_string_to\fP(
+    \fBconst f_utf_string_t      \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_utf_char_t             *\fP\fIcodepoint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a string of the format "U+FFFF" into the codepoint value.
+.PP
+This ignores NULL characters. The string may only contain "U+" followed by a hexidecimal digit, upper or lower case. The "U+" prefix is optional. Only ASCII characters are allowed to represent the Unicode sequence string.
+.PP
+F_failure (with error bit) if width_max is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_valid_not (with error bit) if string is not a valid Unicode string.
+.SH PARAMETERS
+.TP
+.B string
+The string representing a Unicode sequence.
+
+.TP
+.B length
+The maximum number of characters.
+
+.TP
+.B codepoint
+A 32-bit integer representing the Unicode (such as U+0001). Does not need to be interpretted like UTF-8, this is a number from 0 onto max supported Unicode integer value (U+10FFFF).
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_character_unicode_to.3
new file mode 100644 (file)
index 0000000..1a6749e
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_character_unicode_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_character_unicode_to \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_character_unicode_to\fP(
+    \fBconst f_utf_char_t \fP\fIcharacter\fP,
+    \fBuint32_t          *\fP\fIunicode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a given (UTF-8) character into Unicode.
+.PP
+The f_utf_char_t is a 32-bit integer containing UTF-8 sequences, unchanged. The Unicode is a 32-bit integer representing the Unicode (such as U+0001). The Unciode does not need to be interpretted like UTF-8, it simple is a sequence of number from 0 onto max supported Unicode integer value (U+10FFFF).
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B character
+The (UTF-8) character.
+
+.TP
+.B unicode
+The Unicode number.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3), \fIf_utf_char_t\fP, \fIf_utf_character_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is.3
new file mode 100644 (file)
index 0000000..8835edb
--- /dev/null
@@ -0,0 +1,36 @@
+.TH f_utf_is "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is\fP(
+    \fBconst f_string_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a non-ASCII UTF-8 character.
+.PP
+This does not check the validity of the character, for that instead use f_utf_is_valid().
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 character. F_false if not a UTF-8 character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3), \fIf_utf_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic.3
new file mode 100644 (file)
index 0000000..71b14e2
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_alphabetic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_alphabetic \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_alphabetic\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabet character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 alphabet character. F_false if not a UTF-8 alphabet character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic_digit.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic_digit.3
new file mode 100644 (file)
index 0000000..f7b2af4
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_is_alphabetic_digit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_alphabetic_digit \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_alphabetic_digit\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBuint64_t *const           \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabet or digit character.
+.PP
+Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
+.PP
+This does not include fractions such as 1/2 (½) (U+00BD).
+.PP
+This also processes large values such as Roman Numerals. Roman Numerals, however, conflict with traditional alphabetic characters. To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits. For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
+.PP
+Set to NULL to not use.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.TP
+.B value
+(optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 alphabet character. F_false if not a UTF-8 alpha-numeric character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic_numeric.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_alphabetic_numeric.3
new file mode 100644 (file)
index 0000000..90c086b
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_alphabetic_numeric "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_alphabetic_numeric \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_alphabetic_numeric\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 alphabetic or numeric character.
+.PP
+Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) (U+00BD) or superscript 2 (²) (U+00B2).
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 alphabet character. F_false if not a UTF-8 alpha-numeric character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_ascii.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_ascii.3
new file mode 100644 (file)
index 0000000..047d5a5
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_ascii "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_ascii \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_ascii\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if an ASCII character. F_false if not an ASCII character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_combining.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_combining.3
new file mode 100644 (file)
index 0000000..490a58a
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_combining "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_combining \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_combining\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 combining character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 combining character. F_false if not a UTF-8 combining character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_control.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_control.3
new file mode 100644 (file)
index 0000000..3fd67a7
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_utf_is_control "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_control \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_control\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 control character.
+.PP
+This includes control code and control format characters.
+.PP
+The control codes U+0009..U+000D and U+0085 are considered white space and line breaking.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control character. F_false if not a UTF-8 control character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3), \fIiscntrl()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_control_code.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_control_code.3
new file mode 100644 (file)
index 0000000..506784e
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_control_code "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_control_code \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_control_code\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 control code character.
+.PP
+Control Code characters are the traditional control characters, such as "\n" as well as some newer Unicode ones.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control code character. F_false if not a UTF-8 control code character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_control_format.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_control_format.3
new file mode 100644 (file)
index 0000000..745c02e
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_control_format "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_control_format \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_control_format\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 control format character.
+.PP
+Control Format characters are special characters used for formatting. These are considered control characters.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control format character. F_false if not a UTF-8 control format character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_control_picture.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_control_picture.3
new file mode 100644 (file)
index 0000000..fb04f95
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_control_picture "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_control_picture \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_control_picture\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 control picture character.
+.PP
+Control Picture characters are placeholders for special ASCII characters and therefore there are no ASCII Control Picture characters.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 control picture character. F_false if not a UTF-8 control picture character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_digit.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_digit.3
new file mode 100644 (file)
index 0000000..d804072
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_is_digit "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_digit \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_digit\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBuint64_t *const           \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 decimal character.
+.PP
+Digit characters are digit of any base, such as decimal (base-10) or hexidecimal (base-16).
+.PP
+This does not include fractions such as 1/2 (½) (U+00BD).
+.PP
+This also processes large values such as Roman Numerals. Roman Numerals, however, conflict with traditional alphabetic characters. To avoid this only Unicode Roman Numerals found in range U+2160 to U+2188 are treated as their respective digits. For example, the Roman Numeral 'â…¯' (U+216F) represents 1000 rather than having 'M' (U+004D) representing 1000.
+.PP
+Set to NULL to not use.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.TP
+.B value
+(optional) The integer representation of the sequence if the sequence represents a decimal of any base type.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 digit character. F_false if not a UTF-8 digit character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_emoji.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_emoji.3
new file mode 100644 (file)
index 0000000..a28de61
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_emoji "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_emoji \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_emoji\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 emoji character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 emoji character. F_false if not a UTF-8 emoji character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_fragment.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_fragment.3
new file mode 100644 (file)
index 0000000..86672fc
--- /dev/null
@@ -0,0 +1,40 @@
+.TH f_utf_is_fragment "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_fragment \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_fragment\fP(
+    \fBconst f_string_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a 1-width UTF-8 character fragment.
+.PP
+Characters whose width is 1-byte are invalid. However, the character could have been cut-off, so whether or not this is actually valid should be determined by the caller.
+.PP
+For normal validation functions, try using f_utf_character_is() or f_utf_character_is_valid().
+.PP
+According to rfc3629, the valid octect sequences for UTF-8 are: UTF8-octets = *( UTF8-char ) UTF8-char = UTF8-1 / UTF8-2 / UTF8-3 / UTF8-4 UTF8-1 = x00-7F UTF8-2 = xC2-DF UTF8-tail UTF8-3 = xE0 xA0-BF UTF8-tail / xE1-EC 2( UTF8-tail ) / xED x80-9F UTF8-tail / xEE-EF 2( UTF8-tail ) UTF8-4 = xF0 x90-BF 2( UTF8-tail ) / xF1-F3 3( UTF8-tail ) / xF4 x80-8F 2( UTF8-tail ) UTF8-tail = x80-BF
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 character. F_false if not a UTF-8 character.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3), \fIf_utf_character_is()\fP, \fIf_utf_character_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_graph.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_graph.3
new file mode 100644 (file)
index 0000000..e26c44a
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_graph "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_graph \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_graph\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 printable character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_maybe (with error bit) if this could be a graph but width is not long enough. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 graph. F_false if not a UTF-8 graph. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3), \fIisgraph()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_numeric.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_numeric.3
new file mode 100644 (file)
index 0000000..ce68c89
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_numeric "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_numeric \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_numeric\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 numeric character.
+.PP
+Numeric characters are decimal digits, letter numbers, and number-like, such as 1/2 (½) or superscript 2 (²).
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 numeric character. F_false if not a UTF-8 numeric character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_phonetic.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_phonetic.3
new file mode 100644 (file)
index 0000000..682d606
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_phonetic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_phonetic \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_phonetic\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 phonetic character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 phonetic character. F_false if not a UTF-8 phonetic character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_private.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_private.3
new file mode 100644 (file)
index 0000000..01d319b
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_private "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_private \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_private\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 private character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 punctuation character. F_false if not a UTF-8 punctuation character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_punctuation.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_punctuation.3
new file mode 100644 (file)
index 0000000..67405a5
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_punctuation "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_punctuation \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_punctuation\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 punctuation character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 punctuation character. F_false if not a UTF-8 punctuation character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_subscript.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_subscript.3
new file mode 100644 (file)
index 0000000..d871a2b
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_subscript "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_subscript \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_subscript\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 subscript character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 subscript character. F_false if not a UTF-8 subscript character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_superscript.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_superscript.3
new file mode 100644 (file)
index 0000000..d76be12
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_superscript "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_superscript \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_superscript\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 superscript character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 superscript character. F_false if not a UTF-8 superscript character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_symbol.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_symbol.3
new file mode 100644 (file)
index 0000000..2c19b7e
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_symbol "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_symbol \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_symbol\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 symbol character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 symbol character. F_false if not a UTF-8 symbol character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_unassigned.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_unassigned.3
new file mode 100644 (file)
index 0000000..723d528
--- /dev/null
@@ -0,0 +1,41 @@
+.TH f_utf_is_unassigned "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_unassigned \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_unassigned\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a unassigned UTF-8 character.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_parameter (with error bit) if a parameter is unassigned. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if an unassigned UTF-8 character. F_false if not an unassigned UTF-8 character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_valid.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_valid.3
new file mode 100644 (file)
index 0000000..192a220
--- /dev/null
@@ -0,0 +1,47 @@
+.TH f_utf_is_valid "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_valid \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_valid\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a valid (well-formed) UTF-8 character.
+.PP
+This does validate if the UTF-8 character is a valid UTF-8 character. To not do this, use f_utf_is().
+.PP
+Valid ASCII character codes are considered valid by this function.
+.PP
+Codes U+FDD0 to U+FDEF and any character ending in FFFE or FFFF are non-characters, and are therefore invalid.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_failure (with error bit) if width_max is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a valid UTF-8 character or is an ASCII character. F_false if not a valid UTF-8 character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3), \fIf_utf_is()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace.3
new file mode 100644 (file)
index 0000000..7256dee
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_utf_is_whitespace "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_whitespace \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_whitespace\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBconst uint8_t             \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 general space character.
+.PP
+Non-printing or zero-width characters are not considered white space. This does include line separators like '
+.PP
+' (U+000A). This does not include phonetic spaces, like white space modifiers. This does not include non-true white space characters, such as Ogham Space Mark ' ' (U+1680).
+.PP
+Phonetic spaces are white spaces with additional phonetic meaning associated with them. However, because they are not renderred as white space, they are technically not white space.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_maybe (with error bit) if this could be a white space but width is not long enough. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-white space characters that are treated as white space by Unicode are not treated as white space.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 white space. F_false if not a UTF-8 white space. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3), \fIisspace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_modifier.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_modifier.3
new file mode 100644 (file)
index 0000000..5b38fc5
--- /dev/null
@@ -0,0 +1,45 @@
+.TH f_utf_is_whitespace_modifier "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_whitespace_modifier \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_whitespace_modifier\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is a UTF-8 white space modifier character.
+.PP
+These are phonetic spaces.
+.PP
+Phonetic spaces are whitespaces with additional phonetic meaning associated with them. Therefore, these are valid spaces in the technical sense, even if they are not visibly white space.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_maybe (with error bit) if this could be a white space but width is not long enough. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 (modifier) white space. F_false if not a UTF-8 (modifier) white space. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_other.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_other.3
new file mode 100644 (file)
index 0000000..4982ef9
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_whitespace_other "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_whitespace_other \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_whitespace_other\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an other type of UTF-8 space character.
+.PP
+This is a list of white space that are not actual white space (because they are graph characters) but are considered white space, such as Ogham Space Mark ' ' (U+1680).
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_maybe (with error bit) if this could be a white space but width is not long enough. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 (other) white space. F_false if not a UTF-8 (other) white space. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_zero_width.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_whitespace_zero_width.3
new file mode 100644 (file)
index 0000000..d655a88
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_whitespace_zero_width "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_whitespace_zero_width \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_whitespace_zero_width\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an other type of UTF-8 space character.
+.PP
+This is a list of white space that are actually zero-width space (which is not a space), such as Zero-Width Space (U+200B).
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_maybe (with error bit) if this could be a white space but width is not long enough. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 (zero-width) white space. F_false if not a UTF-8 (zero-width) white space. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_wide.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_wide.3
new file mode 100644 (file)
index 0000000..ce44afb
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_wide "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_wide \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_wide\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get whether or not the UTF-8 character is a wide character on display.
+.PP
+This is not the wide as in width in bytes that the codepoint takes up in UTF-8. Instead, this is the width in characters on the screen the character takes up. When "wide" characters that take up either 2 characters on render. When "narrow" characters that take up either 1 character on render.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The (UTF-8) character.
+
+.TP
+.B width_max
+The max width available for representing the UTF-8 character. There must be enough space in the character buffer to handle the Unicode width. It is recommended to always have 4 characters (4 uint8_t) of space available in character. This is the width in bytes the codepoint takes up in UTF-8.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_word.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_word.3
new file mode 100644 (file)
index 0000000..873d421
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_utf_is_word "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_word \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_word\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBconst uint8_t             \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 word character.
+.PP
+A word character is alphabetic-decimal or an underscore '_'.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-inline punctuation connectors are not considered a character (such as U+FE33 '︳'). When FALSE, zero-width punctuation characters are not considered a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 word character. F_false if not a UTF-8 word character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_word_dash.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_word_dash.3
new file mode 100644 (file)
index 0000000..30b62ae
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_utf_is_word_dash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_word_dash \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_word_dash\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBconst uint8_t             \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 word or dash character.
+.PP
+A word dash character is alphabetic-decimal, an underscore '_' or a dash '-'.
+.PP
+Unicode appears to refer to dashes that connect words as a hyphen. Therefore, only these hyphens are considered dashes for the purposes of this function. All other dash-like Unicode characters are not considered a dash here. The dash here is intended for combining words, which matches the context of the Unicode "hyphen".
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-inline punctuation connectors are not considered a character (such as U+FE33 '︳'). When FALSE, zero-width punctuation characters are not considered a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 word or dash character. F_false if not a UTF-8 word or dash character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_word_dash_plus.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_word_dash_plus.3
new file mode 100644 (file)
index 0000000..6369de7
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_utf_is_word_dash_plus "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_word_dash_plus \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_word_dash_plus\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBconst uint8_t             \fP\fIstrict\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 word, dash, or plus character.
+.PP
+A word dash plus character is alphabetic-decimal, an underscore '_', a dash '-', or a plus '+'.
+.PP
+Unicode appears to refer to dashes that connect words as a hyphen. Therefore, only these hyphens are considered dashes for the purposes of this function. All other dash-like Unicode characters are not considered a dash here. The dash here is intended for combining words, which matches the context of the Unicode "hyphen".
+.PP
+This does not include zero-width punctuation, such as "invisible plus" (U+2064) (even in strict mode).
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.TP
+.B strict
+When TRUE, include all appropriate characters by type as per Unicode. When FALSE, non-inline punctuation connectors are not considered a character (such as U+FE33 '︳'). When FALSE, zero-width punctuation characters are not considered a character.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 word or dash character. F_false if not a UTF-8 word or dash character. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_is_zero_width.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_is_zero_width.3
new file mode 100644 (file)
index 0000000..345a900
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_is_zero_width "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_is_zero_width \-
+.SH SYNOPSIS
+.nf
+.B #include <is.h>
+.sp
+\fBf_status_t f_utf_is_zero_width\fP(
+    \fBconst f_string_t          \fP\fIsequence\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if the entire byte block of the character is an ASCII or UTF-8 general non-printing character.
+.PP
+Only characters that do not print, which are generally called zero-width.
+.PP
+F_complete_not_utf (with error bit set) if character is an incomplete UTF-8 sequence. F_maybe (with error bit) if this could be a white space but width is not long enough. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if Unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B sequence
+The byte sequence to validate as a character. There must be enough space allocated to compare against, as limited by width_max.
+
+.TP
+.B width_max
+The maximum width available for checking. Can be anything greater than 0.
+
+.SH RETURN VALUE
+.PP
+F_true if a UTF-8 white space. F_false if not a UTF-8 white space. F_data_not if width_max is less than 1.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIis.h\fP(3), \fIf_utf_is\fP(3), \fIf_utf_is_alphabetic\fP(3), \fIf_utf_is_alphabetic_digit\fP(3), \fIf_utf_is_alphabetic_numeric\fP(3), \fIf_utf_is_ascii\fP(3), \fIf_utf_is_combining\fP(3), \fIf_utf_is_control\fP(3), \fIf_utf_is_control_code\fP(3), \fIf_utf_is_control_format\fP(3), \fIf_utf_is_control_picture\fP(3), \fIf_utf_is_digit\fP(3), \fIf_utf_is_emoji\fP(3), \fIf_utf_is_fragment\fP(3), \fIf_utf_is_graph\fP(3), \fIf_utf_is_numeric\fP(3), \fIf_utf_is_phonetic\fP(3), \fIf_utf_is_private\fP(3), \fIf_utf_is_punctuation\fP(3), \fIf_utf_is_subscript\fP(3), \fIf_utf_is_superscript\fP(3), \fIf_utf_is_symbol\fP(3), \fIf_utf_is_unassigned\fP(3), \fIf_utf_is_valid\fP(3), \fIf_utf_is_whitespace\fP(3), \fIf_utf_is_whitespace_modifier\fP(3), \fIf_utf_is_whitespace_other\fP(3), \fIf_utf_is_whitespace_zero_width\fP(3), \fIf_utf_is_wide\fP(3), \fIf_utf_is_word\fP(3), \fIf_utf_is_word_dash\fP(3), \fIf_utf_is_word_dash_plus\fP(3), \fIf_utf_is_zero_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_append.3
new file mode 100644 (file)
index 0000000..d06fa76
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_utf_string_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_append \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_append\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_append_assure.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_append_assure.3
new file mode 100644 (file)
index 0000000..e3de7e2
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_utf_string_append_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_append_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_append_assure\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_append_assure_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_append_assure_nulless.3
new file mode 100644 (file)
index 0000000..71b6d56
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_utf_string_append_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_append_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_append_assure_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+This ignores NULL characters when comparing both the source and the destination. Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_append_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_append_nulless.3
new file mode 100644 (file)
index 0000000..54991d3
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_utf_string_append_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_append_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_append_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append.3
new file mode 100644 (file)
index 0000000..880b7fe
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_string_dynamic_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_append\fP(
+    \fBconst f_utf_string_dynamic_t  \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_assure.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_assure.3
new file mode 100644 (file)
index 0000000..d6f3003
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_utf_string_dynamic_append_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_append_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_append_assure\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_assure_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_assure_nulless.3
new file mode 100644 (file)
index 0000000..2fa8f93
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_utf_string_dynamic_append_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_append_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_append_assure_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_append_nulless.3
new file mode 100644 (file)
index 0000000..709930f
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_utf_string_dynamic_append_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_append_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_append_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mash.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mash.3
new file mode 100644 (file)
index 0000000..637ef8a
--- /dev/null
@@ -0,0 +1,97 @@
+.TH f_utf_string_dynamic_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_mash\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mash_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mash_nulless.3
new file mode 100644 (file)
index 0000000..721880a
--- /dev/null
@@ -0,0 +1,99 @@
+.TH f_utf_string_dynamic_mash_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_mash_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_mash_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mish.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mish.3
new file mode 100644 (file)
index 0000000..895ba5d
--- /dev/null
@@ -0,0 +1,97 @@
+.TH f_utf_string_dynamic_mish "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_mish \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_mish\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mish_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_mish_nulless.3
new file mode 100644 (file)
index 0000000..7c2dbab
--- /dev/null
@@ -0,0 +1,99 @@
+.TH f_utf_string_dynamic_mish_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_mish_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_mish_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append.3
new file mode 100644 (file)
index 0000000..8dcf859
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_utf_string_dynamic_partial_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_append\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination, but restricted to the given range.
+.PP
+If range.stop is on or after source.used, then source.used - 1 is used as the stopping point.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_assure.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_assure.3
new file mode 100644 (file)
index 0000000..907a463
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_utf_string_dynamic_partial_append_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_append_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_append_assure\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end and restricted to the given range.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_assure_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_assure_nulless.3
new file mode 100644 (file)
index 0000000..262a524
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_utf_string_dynamic_partial_append_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_append_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_append_assure_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination only if the string is not already at the end and restricted to the given range.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_append_nulless.3
new file mode 100644 (file)
index 0000000..a0477a5
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_utf_string_dynamic_partial_append_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_append_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_append_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination, but restricted to the given range.
+.PP
+Skips over NULL characters from source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mash.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mash.3
new file mode 100644 (file)
index 0000000..3cd6692
--- /dev/null
@@ -0,0 +1,122 @@
+.TH f_utf_string_dynamic_partial_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_mash\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mash_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mash_nulless.3
new file mode 100644 (file)
index 0000000..2e7a900
--- /dev/null
@@ -0,0 +1,124 @@
+.TH f_utf_string_dynamic_partial_mash_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_mash_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_mash_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mish.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mish.3
new file mode 100644 (file)
index 0000000..118e231
--- /dev/null
@@ -0,0 +1,122 @@
+.TH f_utf_string_dynamic_partial_mish "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_mish \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_mish\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mish_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_mish_nulless.3
new file mode 100644 (file)
index 0000000..243e344
--- /dev/null
@@ -0,0 +1,124 @@
+.TH f_utf_string_dynamic_partial_mish_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_mish_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_mish_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIglue\fP,
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between, but restricted to the given range.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend.3
new file mode 100644 (file)
index 0000000..9d4af13
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_utf_string_dynamic_partial_prepend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_prepend\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination, but restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_assure.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_assure.3
new file mode 100644 (file)
index 0000000..1147731
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_utf_string_dynamic_partial_prepend_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_prepend_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_prepend_assure\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning and restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_assure_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_assure_nulless.3
new file mode 100644 (file)
index 0000000..e415a90
--- /dev/null
@@ -0,0 +1,96 @@
+.TH f_utf_string_dynamic_partial_prepend_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_prepend_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_prepend_assure_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning and restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_partial_prepend_nulless.3
new file mode 100644 (file)
index 0000000..0844412
--- /dev/null
@@ -0,0 +1,94 @@
+.TH f_utf_string_dynamic_partial_prepend_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_partial_prepend_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_partial_prepend_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBconst f_range_t               \fP\fIrange\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination, but restricted to the given range.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B range
+A range within the source to restrict the copy from.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0. F_data_not_eos if range.start >= source.used. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend.3
new file mode 100644 (file)
index 0000000..e403aa5
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_utf_string_dynamic_prepend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_prepend\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_assure.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_assure.3
new file mode 100644 (file)
index 0000000..711481f
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_utf_string_dynamic_prepend_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_prepend_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_prepend_assure\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_assure_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_assure_nulless.3
new file mode 100644 (file)
index 0000000..7511e66
--- /dev/null
@@ -0,0 +1,71 @@
+.TH f_utf_string_dynamic_prepend_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_prepend_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_prepend_assure_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_prepend_nulless.3
new file mode 100644 (file)
index 0000000..46fb83d
--- /dev/null
@@ -0,0 +1,69 @@
+.TH f_utf_string_dynamic_prepend_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_prepend_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_prepend_nulless\fP(
+    \fBconst f_utf_string_static_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line.3
new file mode 100644 (file)
index 0000000..3507644
--- /dev/null
@@ -0,0 +1,87 @@
+.TH f_utf_string_dynamic_seek_line "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_seek_line \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_seek_line\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_back.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_back.3
new file mode 100644 (file)
index 0000000..41d788b
--- /dev/null
@@ -0,0 +1,87 @@
+.TH f_utf_string_dynamic_seek_line_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_seek_line_back \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_seek_line_back\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location backward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_to.3
new file mode 100644 (file)
index 0000000..0e18680
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_utf_string_dynamic_seek_line_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_seek_line_to \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_seek_line_to\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_utf_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const            \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_to_back.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_line_to_back.3
new file mode 100644 (file)
index 0000000..56b0109
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_utf_string_dynamic_seek_line_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_seek_line_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_seek_line_to_back\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_utf_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const            \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location backward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_to.3
new file mode 100644 (file)
index 0000000..f5209b4
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_utf_string_dynamic_seek_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_seek_to \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_seek_to\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_utf_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const            \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location forward until the character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_to_back.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_seek_to_back.3
new file mode 100644 (file)
index 0000000..94aaa01
--- /dev/null
@@ -0,0 +1,92 @@
+.TH f_utf_string_dynamic_seek_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_seek_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_seek_to_back\fP(
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_utf_char_t          \fP\fIseek_to_this\fP,
+    \fBf_range_t *const            \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the buffer location backward until the character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to traverse.
+
+.TP
+.B seek_to_this
+A single-width character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success, but stopped at end of string. F_okay_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.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_terminate.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_terminate.3
new file mode 100644 (file)
index 0000000..b063e4e
--- /dev/null
@@ -0,0 +1,42 @@
+.TH f_utf_string_dynamic_terminate "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_terminate \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_terminate\fP(
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Guarantee that an end of string (NULL) exists at the end of the string.
+.PP
+This is intended to be used for anything requiring NULL terminated strings. This will reallocate more space if necessary.
+.PP
+If destination size is 0, then it will be reallocated and have the NULL assigned at index 0.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if string is too large to fit into the buffer.
+.PP
+Errors (with error bit) from: f_memory_array_increase().
+.SH PARAMETERS
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_terminate_after.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamic_terminate_after.3
new file mode 100644 (file)
index 0000000..f0e537b
--- /dev/null
@@ -0,0 +1,44 @@
+.TH f_utf_string_dynamic_terminate_after "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamic_terminate_after \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamic.h>
+.sp
+\fBf_status_t f_utf_string_dynamic_terminate_after\fP(
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Guarantee that an end of string (NULL) exists at the end of the string.
+.PP
+This ensures that the terminating NULL not only exists but is not counted in destination.used.
+.PP
+This is intended to be used for anything requiring NULL terminated strings whose used length cannot be counted. This will reallocate more space if necessary.
+.PP
+If destination size is 0, then it will be reallocated and have the NULL assigned at index 0.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if string is too large to fit into the buffer.
+.PP
+Errors (with error bit) from: f_memory_array_increase().
+.SH PARAMETERS
+.TP
+.B destination
+The new string, which will be allocated or reallocated as necessary.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamic.h\fP(3), \fIf_utf_string_dynamic_append\fP(3), \fIf_utf_string_dynamic_append_assure\fP(3), \fIf_utf_string_dynamic_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_append_nulless\fP(3), \fIf_utf_string_dynamic_mash\fP(3), \fIf_utf_string_dynamic_mash_nulless\fP(3), \fIf_utf_string_dynamic_mish\fP(3), \fIf_utf_string_dynamic_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_append\fP(3), \fIf_utf_string_dynamic_partial_append_assure\fP(3), \fIf_utf_string_dynamic_partial_append_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_append_nulless\fP(3), \fIf_utf_string_dynamic_partial_mash\fP(3), \fIf_utf_string_dynamic_partial_mash_nulless\fP(3), \fIf_utf_string_dynamic_partial_mish\fP(3), \fIf_utf_string_dynamic_partial_mish_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure\fP(3), \fIf_utf_string_dynamic_partial_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_partial_prepend_nulless\fP(3), \fIf_utf_string_dynamic_prepend\fP(3), \fIf_utf_string_dynamic_prepend_assure\fP(3), \fIf_utf_string_dynamic_prepend_assure_nulless\fP(3), \fIf_utf_string_dynamic_prepend_nulless\fP(3), \fIf_utf_string_dynamic_seek_line\fP(3), \fIf_utf_string_dynamic_seek_line_back\fP(3), \fIf_utf_string_dynamic_seek_line_to\fP(3), \fIf_utf_string_dynamic_seek_line_to_back\fP(3), \fIf_utf_string_dynamic_seek_to\fP(3), \fIf_utf_string_dynamic_seek_to_back\fP(3), \fIf_utf_string_dynamic_terminate\fP(3), \fIf_utf_string_dynamic_terminate_after\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_append.3
new file mode 100644 (file)
index 0000000..79b5902
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_string_dynamics_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamics_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_utf_string_dynamics_append\fP(
+    \fBconst f_utf_string_dynamic_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamics_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_utf_string_dynamics_append\fP(3), \fIf_utf_string_dynamics_append_all\fP(3), \fIf_utf_string_dynamics_delete_callback\fP(3), \fIf_utf_string_dynamics_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_append_all.3
new file mode 100644 (file)
index 0000000..624161c
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_string_dynamics_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamics_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_utf_string_dynamics_append_all\fP(
+    \fBconst f_utf_string_dynamics_t  \fP\fIsource\fP,
+    \fBf_utf_string_dynamics_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source strings onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source strings to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_utf_string_dynamics_append\fP(3), \fIf_utf_string_dynamics_append_all\fP(3), \fIf_utf_string_dynamics_delete_callback\fP(3), \fIf_utf_string_dynamics_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_delete_callback.3
new file mode 100644 (file)
index 0000000..4bc6f6c
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_dynamics_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamics_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_utf_string_dynamics_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_utf_string_dynamics_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_utf_string_dynamics_append\fP(3), \fIf_utf_string_dynamics_append_all\fP(3), \fIf_utf_string_dynamics_delete_callback\fP(3), \fIf_utf_string_dynamics_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_utf_string_dynamics_t\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamics_destroy_callback.3
new file mode 100644 (file)
index 0000000..9615762
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_dynamics_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamics_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamics.h>
+.sp
+\fBf_status_t f_utf_string_dynamics_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_utf_string_dynamics_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamics.h\fP(3), \fIf_utf_string_dynamics_append\fP(3), \fIf_utf_string_dynamics_append_all\fP(3), \fIf_utf_string_dynamics_delete_callback\fP(3), \fIf_utf_string_dynamics_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_utf_string_dynamics_t\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_append.3
new file mode 100644 (file)
index 0000000..5078243
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_string_dynamicss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamicss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_utf_string_dynamicss_append\fP(
+    \fBconst f_utf_string_dynamics_t   \fP\fIsource\fP,
+    \fBf_utf_string_dynamicss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source string onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_utf_string_dynamicss_append\fP(3), \fIf_utf_string_dynamicss_append_all\fP(3), \fIf_utf_string_dynamicss_delete_callback\fP(3), \fIf_utf_string_dynamicss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_append_all.3
new file mode 100644 (file)
index 0000000..d9386d3
--- /dev/null
@@ -0,0 +1,43 @@
+.TH f_utf_string_dynamicss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamicss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_utf_string_dynamicss_append_all\fP(
+    \fBconst f_utf_string_dynamicss_t  \fP\fIsource\fP,
+    \fBf_utf_string_dynamicss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source strings onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source strings to append.
+
+.TP
+.B destination
+The destination strings the source is appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_utf_string_dynamicss_append\fP(3), \fIf_utf_string_dynamicss_append_all\fP(3), \fIf_utf_string_dynamicss_delete_callback\fP(3), \fIf_utf_string_dynamicss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_delete_callback.3
new file mode 100644 (file)
index 0000000..2cda419
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_dynamicss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamicss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_utf_string_dynamicss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_utf_string_dynamicss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_utf_string_dynamicss_append\fP(3), \fIf_utf_string_dynamicss_append_all\fP(3), \fIf_utf_string_dynamicss_delete_callback\fP(3), \fIf_utf_string_dynamicss_destroy_callback\fP(3), \fIf_utf_string_dynamicss_t\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_dynamicss_destroy_callback.3
new file mode 100644 (file)
index 0000000..423dcfe
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_dynamicss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_dynamicss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <dynamicss.h>
+.sp
+\fBf_status_t f_utf_string_dynamicss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_utf_string_dynamicss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdynamicss.h\fP(3), \fIf_utf_string_dynamicss_append\fP(3), \fIf_utf_string_dynamicss_append_all\fP(3), \fIf_utf_string_dynamicss_delete_callback\fP(3), \fIf_utf_string_dynamicss_destroy_callback\fP(3), \fIf_utf_string_dynamicss_t\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_append.3
new file mode 100644 (file)
index 0000000..091c992
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_utf_string_map_multis_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multis_append \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_utf_string_map_multis_append\fP(
+    \fBconst f_utf_string_map_multi_t \fP\fIsource\fP,
+    \fBf_utf_string_map_multis_t     *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source map_multi onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string map consisting of a key and multiple values.
+.PP
+value: An array of strings representing the map value.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multi_t {
+  f_utf_string_dynamic_t  \fIkey\fP;
+  f_utf_string_dynamics_t \fIvalue\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multis_t {
+  f_utf_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t        \fIused\fP;
+  f_number_unsigned_t        \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_utf_string_map_multis_append\fP(3), \fIf_utf_string_map_multis_append_all\fP(3), \fIf_utf_string_map_multis_delete_callback\fP(3), \fIf_utf_string_map_multis_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_append_all.3
new file mode 100644 (file)
index 0000000..068e5df
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_map_multis_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multis_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_utf_string_map_multis_append_all\fP(
+    \fBconst f_utf_string_map_multis_t \fP\fIsource\fP,
+    \fBf_utf_string_map_multis_t      *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source map_multis onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multis_t {
+  f_utf_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t        \fIused\fP;
+  f_number_unsigned_t        \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multis_t {
+  f_utf_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t        \fIused\fP;
+  f_number_unsigned_t        \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_utf_string_map_multis_append\fP(3), \fIf_utf_string_map_multis_append_all\fP(3), \fIf_utf_string_map_multis_delete_callback\fP(3), \fIf_utf_string_map_multis_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_delete_callback.3
new file mode 100644 (file)
index 0000000..c22a294
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_map_multis_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multis_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_utf_string_map_multis_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_utf_string_map_multis_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_utf_string_map_multis_append\fP(3), \fIf_utf_string_map_multis_append_all\fP(3), \fIf_utf_string_map_multis_delete_callback\fP(3), \fIf_utf_string_map_multis_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multis_destroy_callback.3
new file mode 100644 (file)
index 0000000..f164b4f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_map_multis_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multis_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multis.h>
+.sp
+\fBf_status_t f_utf_string_map_multis_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_utf_string_map_multis_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multis.h\fP(3), \fIf_utf_string_map_multis_append\fP(3), \fIf_utf_string_map_multis_append_all\fP(3), \fIf_utf_string_map_multis_delete_callback\fP(3), \fIf_utf_string_map_multis_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_append.3
new file mode 100644 (file)
index 0000000..cf8129b
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_map_multiss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multiss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_utf_string_map_multiss_append\fP(
+    \fBconst f_utf_string_map_multis_t \fP\fIsource\fP,
+    \fBf_utf_string_map_multiss_t     *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source map_multis onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multis_t {
+  f_utf_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t        \fIused\fP;
+  f_number_unsigned_t        \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps arrays.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multiss_t {
+  f_utf_string_map_multis_t  *\fIarray\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_number_unsigned_t         \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_utf_string_map_multiss_append\fP(3), \fIf_utf_string_map_multiss_append_all\fP(3), \fIf_utf_string_map_multiss_delete_callback\fP(3), \fIf_utf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_append_all.3
new file mode 100644 (file)
index 0000000..8993107
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_map_multiss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multiss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_utf_string_map_multiss_append_all\fP(
+    \fBconst f_utf_string_map_multiss_t \fP\fIsource\fP,
+    \fBf_utf_string_map_multiss_t      *\fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source map_multiss onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps arrays.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multiss_t {
+  f_utf_string_map_multis_t  *\fIarray\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_number_unsigned_t         \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps arrays.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_multiss_t {
+  f_utf_string_map_multis_t  *\fIarray\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_number_unsigned_t         \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_utf_string_map_multiss_append\fP(3), \fIf_utf_string_map_multiss_append_all\fP(3), \fIf_utf_string_map_multiss_delete_callback\fP(3), \fIf_utf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_delete_callback.3
new file mode 100644 (file)
index 0000000..4b48b04
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_map_multiss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multiss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_utf_string_map_multiss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_utf_string_map_multiss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_utf_string_map_multiss_append\fP(3), \fIf_utf_string_map_multiss_append_all\fP(3), \fIf_utf_string_map_multiss_delete_callback\fP(3), \fIf_utf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_map_multiss_destroy_callback.3
new file mode 100644 (file)
index 0000000..dc1385b
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_map_multiss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_map_multiss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <map_multiss.h>
+.sp
+\fBf_status_t f_utf_string_map_multiss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_utf_string_map_multiss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImap_multiss.h\fP(3), \fIf_utf_string_map_multiss_append\fP(3), \fIf_utf_string_map_multiss_append_all\fP(3), \fIf_utf_string_map_multiss_delete_callback\fP(3), \fIf_utf_string_map_multiss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_append.3
new file mode 100644 (file)
index 0000000..02dee51
--- /dev/null
@@ -0,0 +1,81 @@
+.TH f_utf_string_maps_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_maps_append \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_utf_string_maps_append\fP(
+    \fBconst f_utf_string_map_t   \fP\fIsource\fP,
+    \fBf_utf_string_maps_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source map onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string map consisting of a name and value.
+.PP
+value: A string representing the map value.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_map_t {
+  f_utf_string_dynamic_t \fIkey\fP;
+  f_utf_string_dynamic_t \fIvalue\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_maps_t {
+  f_utf_string_map_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_utf_string_maps_append\fP(3), \fIf_utf_string_maps_append_all\fP(3), \fIf_utf_string_maps_delete_callback\fP(3), \fIf_utf_string_maps_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_append_all.3
new file mode 100644 (file)
index 0000000..d885d2f
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_maps_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_maps_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_utf_string_maps_append_all\fP(
+    \fBconst f_utf_string_maps_t  \fP\fIsource\fP,
+    \fBf_utf_string_maps_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source maps onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source maps to append.
+
+.TP
+.B destination
+The destination maps the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_maps_t {
+  f_utf_string_map_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_maps_t {
+  f_utf_string_map_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_utf_string_maps_append\fP(3), \fIf_utf_string_maps_append_all\fP(3), \fIf_utf_string_maps_delete_callback\fP(3), \fIf_utf_string_maps_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_delete_callback.3
new file mode 100644 (file)
index 0000000..0cff832
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_maps_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_maps_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_utf_string_maps_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_utf_string_maps_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_utf_string_maps_append\fP(3), \fIf_utf_string_maps_append_all\fP(3), \fIf_utf_string_maps_delete_callback\fP(3), \fIf_utf_string_maps_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_maps_destroy_callback.3
new file mode 100644 (file)
index 0000000..09c5c56
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_maps_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_maps_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <maps.h>
+.sp
+\fBf_status_t f_utf_string_maps_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_utf_string_maps_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImaps.h\fP(3), \fIf_utf_string_maps_append\fP(3), \fIf_utf_string_maps_append_all\fP(3), \fIf_utf_string_maps_delete_callback\fP(3), \fIf_utf_string_maps_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_append.3
new file mode 100644 (file)
index 0000000..6220b3e
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_mapss_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mapss_append \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_utf_string_mapss_append\fP(
+    \fBconst f_utf_string_maps_t   \fP\fIsource\fP,
+    \fBf_utf_string_mapss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a single source maps onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source mapss to append.
+
+.TP
+.B destination
+The destination mapss the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_maps_t {
+  f_utf_string_map_t  *\fIarray\fP;
+  f_number_unsigned_t  \fIused\fP;
+  f_number_unsigned_t  \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_mapss_t {
+  f_utf_string_maps_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_utf_string_mapss_append\fP(3), \fIf_utf_string_mapss_append_all\fP(3), \fIf_utf_string_mapss_delete_callback\fP(3), \fIf_utf_string_mapss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_append_all.3
new file mode 100644 (file)
index 0000000..04576d7
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_mapss_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mapss_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_utf_string_mapss_append_all\fP(
+    \fBconst f_utf_string_mapss_t  \fP\fIsource\fP,
+    \fBf_utf_string_mapss_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source mapss onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source mapss to append.
+
+.TP
+.B destination
+The destination mapss the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_mapss_t {
+  f_utf_string_maps_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_mapss_t {
+  f_utf_string_maps_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is nothing to append (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_utf_string_mapss_append\fP(3), \fIf_utf_string_mapss_append_all\fP(3), \fIf_utf_string_mapss_delete_callback\fP(3), \fIf_utf_string_mapss_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_delete_callback.3
new file mode 100644 (file)
index 0000000..eefc902
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_mapss_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mapss_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_utf_string_mapss_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_utf_string_mapss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_utf_string_mapss_append\fP(3), \fIf_utf_string_mapss_append_all\fP(3), \fIf_utf_string_mapss_delete_callback\fP(3), \fIf_utf_string_mapss_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mapss_destroy_callback.3
new file mode 100644 (file)
index 0000000..54f6bb5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_mapss_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mapss_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <mapss.h>
+.sp
+\fBf_status_t f_utf_string_mapss_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_utf_string_mapss_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImapss.h\fP(3), \fIf_utf_string_mapss_append\fP(3), \fIf_utf_string_mapss_append_all\fP(3), \fIf_utf_string_mapss_delete_callback\fP(3), \fIf_utf_string_mapss_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mash.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mash.3
new file mode 100644 (file)
index 0000000..a007d18
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_utf_string_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_mash\fP(
+    \fBconst f_utf_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t     \fP\fIglue_length\fP,
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mash_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mash_nulless.3
new file mode 100644 (file)
index 0000000..ac86ee4
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_utf_string_mash_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mash_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_mash_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t     \fP\fIglue_length\fP,
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mish.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mish.3
new file mode 100644 (file)
index 0000000..e8241c2
--- /dev/null
@@ -0,0 +1,60 @@
+.TH f_utf_string_mish "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mish \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_mish\fP(
+    \fBconst f_utf_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t     \fP\fIglue_length\fP,
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_mish_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_mish_nulless.3
new file mode 100644 (file)
index 0000000..36c78c9
--- /dev/null
@@ -0,0 +1,62 @@
+.TH f_utf_string_mish_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_mish_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_mish_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIglue\fP,
+    \fBconst f_number_unsigned_t     \fP\fIglue_length\fP,
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination with the glue in between.
+.PP
+If the destination string is empty, then no glue is appended.
+.PP
+Skips over NULL characters from glue and source when appending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B glue_length
+The number of bytes the glue takes up.
+
+.TP
+.B source
+The source string to append.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend.3
new file mode 100644 (file)
index 0000000..9415f56
--- /dev/null
@@ -0,0 +1,50 @@
+.TH f_utf_string_prepend "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_prepend\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_assure.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_assure.3
new file mode 100644 (file)
index 0000000..582df6b
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_utf_string_prepend_assure "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_prepend_assure \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_prepend_assure\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_assure_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_assure_nulless.3
new file mode 100644 (file)
index 0000000..37e640c
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_utf_string_prepend_assure_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_prepend_assure_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_prepend_assure_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination. Skips over NULL characters from source when prepending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_nulless.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_prepend_nulless.3
new file mode 100644 (file)
index 0000000..9907ca0
--- /dev/null
@@ -0,0 +1,52 @@
+.TH f_utf_string_prepend_nulless "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_prepend_nulless \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_prepend_nulless\fP(
+    \fBconst f_utf_string_t          \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t     \fP\fIlength\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepend the source string onto the destination, but only if the string is not already at the beginning.
+.PP
+Prepend operations require memory move operations and are therefore likely more expensive than append operations.
+.PP
+This ignores NULL characters when comparing both the source and the destination. Skips over NULL characters from source when prepending.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source string to prepend.
+
+.TP
+.B length
+The length of source to append.
+
+.TP
+.B destination
+The destination string the source is prepended onto.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source length is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line.3
new file mode 100644 (file)
index 0000000..46ccebc
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_utf_string_seek_line "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_seek_line \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_seek_line\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBf_range_t *const     \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at end of range. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_back.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_back.3
new file mode 100644 (file)
index 0000000..5d93d3a
--- /dev/null
@@ -0,0 +1,64 @@
+.TH f_utf_string_seek_line_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_seek_line_back \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_seek_line_back\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBf_range_t *const     \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location backward until EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at end of range. F_data_not_stop on success, but the range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_to.3
new file mode 100644 (file)
index 0000000..2a47731
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_utf_string_seek_line_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_seek_line_to \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_seek_line_to\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBconst f_utf_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const     \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_to_back.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_line_to_back.3
new file mode 100644 (file)
index 0000000..423872a
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_utf_string_seek_line_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_seek_line_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_seek_line_to_back\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBconst f_utf_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const     \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location backward until the character (1-byte wide) or EOL is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eol on success, but stopped at EOL. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_to.3
new file mode 100644 (file)
index 0000000..5cd86a8
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_utf_string_seek_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_seek_to \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_seek_to\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBconst f_utf_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const     \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location forward until the character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The start location will be incremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_to_back.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_seek_to_back.3
new file mode 100644 (file)
index 0000000..163ce1c
--- /dev/null
@@ -0,0 +1,67 @@
+.TH f_utf_string_seek_to_back "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_seek_to_back \-
+.SH SYNOPSIS
+.nf
+.B #include <string.h>
+.sp
+\fBf_status_t f_utf_string_seek_to_back\fP(
+    \fBconst f_utf_string_t \fP\fIstring\fP,
+    \fBconst f_utf_char_t   \fP\fIseek_to\fP,
+    \fBf_range_t *const     \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Seek the string location backward until the character (1-byte wide) is reached.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B string
+The string to traverse.
+
+.TP
+.B seek_to
+A character representing a character to seek to.
+
+.TP
+.B range
+A range within the buffer representing the start and stop locations. The stop location will be decremented by the seek.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_stop on success, but stopped at the stop location. F_data_not_stop if range.start > range.stop.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstring.h\fP(3), \fIf_utf_string_append\fP(3), \fIf_utf_string_append_assure\fP(3), \fIf_utf_string_append_assure_nulless\fP(3), \fIf_utf_string_append_nulless\fP(3), \fIf_utf_string_mash\fP(3), \fIf_utf_string_mash_nulless\fP(3), \fIf_utf_string_mish\fP(3), \fIf_utf_string_mish_nulless\fP(3), \fIf_utf_string_prepend\fP(3), \fIf_utf_string_prepend_assure\fP(3), \fIf_utf_string_prepend_assure_nulless\fP(3), \fIf_utf_string_prepend_nulless\fP(3), \fIf_utf_string_seek_line\fP(3), \fIf_utf_string_seek_line_back\fP(3), \fIf_utf_string_seek_line_to\fP(3), \fIf_utf_string_seek_line_to_back\fP(3), \fIf_utf_string_seek_to\fP(3), \fIf_utf_string_seek_to_back\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_append.3
new file mode 100644 (file)
index 0000000..d095ca7
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_triples_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_triples_append \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_utf_string_triples_append\fP(
+    \fBconst f_utf_string_triple_t   \fP\fIsource\fP,
+    \fBf_utf_string_triples_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source triples onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source triple to append.
+
+.TP
+.B destination
+The destination triples the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string triple consisting of a set of three strings.
+.PP
+c: A string representing the third string in the triple.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_triple_t {
+  f_utf_string_dynamic_t \fIa\fP;
+  f_utf_string_dynamic_t \fIb\fP;
+  f_utf_string_dynamic_t \fIc\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_triples_t {
+  f_utf_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_utf_string_triples_append\fP(3), \fIf_utf_string_triples_append_all\fP(3), \fIf_utf_string_triples_delete_callback\fP(3), \fIf_utf_string_triples_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_append_all.3
new file mode 100644 (file)
index 0000000..fe26745
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_triples_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_triples_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_utf_string_triples_append_all\fP(
+    \fBconst f_utf_string_triples_t  \fP\fIsource\fP,
+    \fBf_utf_string_triples_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source triples onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source triples to append.
+
+.TP
+.B destination
+The destination triples the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_triples_t {
+  f_utf_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_triples_t {
+  f_utf_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_utf_string_triples_append\fP(3), \fIf_utf_string_triples_append_all\fP(3), \fIf_utf_string_triples_delete_callback\fP(3), \fIf_utf_string_triples_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_delete_callback.3
new file mode 100644 (file)
index 0000000..5071c05
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_triples_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_triples_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_utf_string_triples_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_resize() for an f_utf_string_triples_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_utf_string_triples_append\fP(3), \fIf_utf_string_triples_append_all\fP(3), \fIf_utf_string_triples_delete_callback\fP(3), \fIf_utf_string_triples_destroy_callback\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_triples_destroy_callback.3
new file mode 100644 (file)
index 0000000..fdfbbd5
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_triples_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_triples_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <triples.h>
+.sp
+\fBf_status_t f_utf_string_triples_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrays_adjust() for an f_utf_string_triples_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItriples.h\fP(3), \fIf_utf_string_triples_append\fP(3), \fIf_utf_string_triples_append_all\fP(3), \fIf_utf_string_triples_delete_callback\fP(3), \fIf_utf_string_triples_destroy_callback\fP(3), \fIf_memory_arrays_adjust()\fP, \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_append.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_append.3
new file mode 100644 (file)
index 0000000..76cd8b8
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_tripless_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_tripless_append \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_utf_string_tripless_append\fP(
+    \fBconst f_utf_string_triples_t   \fP\fIsource\fP,
+    \fBf_utf_string_tripless_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the single source triples onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source triples to append.
+
+.TP
+.B destination
+The destination tripless the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_triples_t {
+  f_utf_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t     \fIused\fP;
+  f_number_unsigned_t     \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string tripless.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_tripless_t {
+  f_utf_string_triples_t  *\fIarray\fP;
+  f_number_unsigned_t      \fIused\fP;
+  f_number_unsigned_t      \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_utf_string_tripless_append\fP(3), \fIf_utf_string_tripless_append_all\fP(3), \fIf_utf_string_tripless_delete_callback\fP(3), \fIf_utf_string_tripless_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_append_all.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_append_all.3
new file mode 100644 (file)
index 0000000..dae8122
--- /dev/null
@@ -0,0 +1,82 @@
+.TH f_utf_string_tripless_append_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_tripless_append_all \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_utf_string_tripless_append_all\fP(
+    \fBconst f_utf_string_tripless_t  \fP\fIsource\fP,
+    \fBf_utf_string_tripless_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the source tripless onto the destination.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if the combined string is too large.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B source
+The source tripless to append.
+
+.TP
+.B destination
+The destination tripless the source is appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of string tripless.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_tripless_t {
+  f_utf_string_triples_t  *\fIarray\fP;
+  f_number_unsigned_t      \fIused\fP;
+  f_number_unsigned_t      \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string tripless.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_tripless_t {
+  f_utf_string_triples_t  *\fIarray\fP;
+  f_number_unsigned_t      \fIused\fP;
+  f_number_unsigned_t      \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success, but there is no reason to increase size (size == 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_utf_string_tripless_append\fP(3), \fIf_utf_string_tripless_append_all\fP(3), \fIf_utf_string_tripless_delete_callback\fP(3), \fIf_utf_string_tripless_destroy_callback\fP(3), \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_delete_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_delete_callback.3
new file mode 100644 (file)
index 0000000..f5cb818
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_tripless_delete_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_tripless_delete_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_utf_string_tripless_delete_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_resize() for an f_utf_string_tripless_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_utf_string_tripless_append\fP(3), \fIf_utf_string_tripless_append_all\fP(3), \fIf_utf_string_tripless_delete_callback\fP(3), \fIf_utf_string_tripless_destroy_callback\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_destroy_callback.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_string_tripless_destroy_callback.3
new file mode 100644 (file)
index 0000000..049396f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH f_utf_string_tripless_destroy_callback "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_string_tripless_destroy_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <tripless.h>
+.sp
+\fBf_status_t f_utf_string_tripless_destroy_callback\fP(
+    \fBconst f_number_unsigned_t \fP\fIstart\fP,
+    \fBconst f_number_unsigned_t \fP\fIstop\fP,
+    \fBvoid *const               \fP\fIarray\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be passed to f_memory_arrayss_adjust() for an f_utf_string_tripless_t structure.
+.PP
+This is only called when shrinking the array and generally should perform deallocations.
+.PP
+This does not do parameter checking.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_adjust().
+.SH PARAMETERS
+.TP
+.B start
+The inclusive start position in the array to start deleting.
+
+.TP
+.B stop
+The exclusive stop position in the array to stop deleting.
+
+.TP
+.B array
+The array structure to delete all values of.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItripless.h\fP(3), \fIf_utf_string_tripless_append\fP(3), \fIf_utf_string_tripless_append_all\fP(3), \fIf_utf_string_tripless_delete_callback\fP(3), \fIf_utf_string_tripless_destroy_callback\fP(3), \fIf_memory_array_adjust()\fP, \fIf_memory_array_adjust()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_unicode_from.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_unicode_from.3
new file mode 100644 (file)
index 0000000..2d2657a
--- /dev/null
@@ -0,0 +1,46 @@
+.TH f_utf_unicode_from "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_unicode_from \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_unicode_from\fP(
+    \fBconst uint32_t            \fP\fIunicode\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBf_string_t               *\fP\fIcharacter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a given Unicode into a string block representing a single character.
+.PP
+F_failure (with error bit) if width_max is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B unicode
+A 32-bit integer representing the Unicode (such as U+0001). Does not need to be interpretted like UTF-8, this is a number from 0 onto max supported Unicode integer value (U+10FFFF).
+
+.TP
+.B width_max
+The max width available for representing the UTF-8 character. There must be enough space in the character buffer to handle the Unicode width. It is recommended to always have 4 characters (4 uint8_t) of space available in character.
+
+.TP
+.B character
+The (UTF-8) character as a sequence of bytes. This must have a length equal to the width (up to 4 characters) to be safely used. The caller is expected to ensure this.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_unicode_string_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_unicode_string_to.3
new file mode 100644 (file)
index 0000000..3d074fd
--- /dev/null
@@ -0,0 +1,48 @@
+.TH f_utf_unicode_string_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_unicode_string_to \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_unicode_string_to\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBuint32_t                 *\fP\fIunicode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a string of the format "U+FFFF" into the codepoint value.
+.PP
+This ignores NULL characters. The string may only contain "U+" followed by a hexidecimal digit, upper or lower case. The "U+" prefix is optional. Only ASCII characters are allowed to represent the Unicode sequence string.
+.PP
+F_failure (with error bit) if width_max is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_valid_not (with error bit) if string is not a valid Unicode string.
+.SH PARAMETERS
+.TP
+.B string
+The string representing a Unicode sequence.
+
+.TP
+.B length
+The maximum number of characters.
+
+.TP
+.B unicode
+A 32-bit integer representing the Unicode (such as U+0001). Does not need to be interpretted like UTF-8, this is a number from 0 onto max supported Unicode integer value (U+10FFFF).
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_0/f_utf/data/documentation/man/man3/f_utf_unicode_to.3 b/level_0/f_utf/data/documentation/man/man3/f_utf_unicode_to.3
new file mode 100644 (file)
index 0000000..122b811
--- /dev/null
@@ -0,0 +1,46 @@
+.TH f_utf_unicode_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 0" "Library Functions"
+.SH "NAME"
+f_utf_unicode_to \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBf_status_t f_utf_unicode_to\fP(
+    \fBconst f_string_t          \fP\fIcharacter\fP,
+    \fBconst f_number_unsigned_t \fP\fIwidth_max\fP,
+    \fBuint32_t                 *\fP\fIunicode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a given string block representing a single character into Unicode.
+.PP
+F_failure (with error bit) if width is not long enough to convert. F_parameter (with error bit) if a parameter is invalid. F_utf_fragment (with error bit) if character is a UTF-8 fragment. F_utf_not (with error bit) if unicode is an invalid Unicode character.
+.SH PARAMETERS
+.TP
+.B character
+The (UTF-8) character to convert to the Unicode representation. The f_utf_char_t is a 32-bit integer containing UTF-8 sequences, unchanged.
+
+.TP
+.B width_max
+The max width available for representing the UTF-8 character. There must be enough space in the character buffer to handle the Unicode width. It is recommended to always have 4 characters (4 uint8_t) of space available in character.
+
+.TP
+.B unicode
+A 32-bit integer representing the Unicode (such as U+0001). Does not need to be interpretted like UTF-8, this is a number from 0 onto max supported Unicode integer value (U+10FFFF).
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIf_utf_char_to_char\fP(3), \fIf_utf_char_to_character\fP(3), \fIf_utf_character_unicode_from\fP(3), \fIf_utf_character_unicode_string_to\fP(3), \fIf_utf_character_unicode_to\fP(3), \fIf_utf_unicode_from\fP(3), \fIf_utf_unicode_string_to\fP(3), \fIf_utf_unicode_to\fP(3), \fIf_utf_character_is_valid()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_control_group/data/documentation/man/man3/fl_control_group_apply.3 b/level_1/fl_control_group/data/documentation/man/man3/fl_control_group_apply.3
new file mode 100644 (file)
index 0000000..2a81fff
--- /dev/null
@@ -0,0 +1,63 @@
+.TH fl_control_group_apply "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_control_group_apply \-
+.SH SYNOPSIS
+.nf
+.B #include <control_group.h>
+.sp
+\fBf_status_t fl_control_group_apply\fP(
+    \fBconst f_control_group_t \fP\fIcontrol_group\fP,
+    \fBconst pid_t             \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Apply the given control groups to the process represented by the PID.
+.PP
+F_memory_not (with error bit) if a out of memory. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if the current user/process has insufficient privileges to set certain cgroup settings. F_space_not (with error bit) if a maximum resource limit is reached and there is not enough space. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_file_stream_open().
+.SH PARAMETERS
+.TP
+.B control_group
+The control group(s) to apply.
+
+.TP
+.B id
+The PID of the process to apply the control group(s) to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for associating some process with one or more control groups (cgroups).
+.PP
+groups: An array of control groups, relative to the sysfs path (such as "memory/example").
+.sp
+.RS
+.nf
+\fB
+struct f_control_group_t {
+  uint8_t             \fIas_new\fP;
+  f_string_dynamic_t  \fIpath\fP;
+  f_string_dynamics_t \fIgroups\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontrol_group.h\fP(3), \fIfl_control_group_apply\fP(3), \fIf_file_stream_open()\fP, \fIfprintf()\fP, \fImemcpy()\fP, \fIunshare()\fP, \fIf_file_stream_close()\fP, \fIf_file_stream_flush()\fP, \fIf_file_stream_open()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_signed.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_signed.3
new file mode 100644 (file)
index 0000000..546a8ff
--- /dev/null
@@ -0,0 +1,117 @@
+.TH fl_conversion_dynamic_partial_to_signed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_partial_to_signed \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_partial_to_signed\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_signed_t *const   \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of number characters into a f_number_signed_t.
+.PP
+This will stop at one of the following: range.stop or a non-digit. This will ignore NULL values. This will not process signed statuses (+/-).
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_number (with error bit) if no conversion was made due to non-binary values being found. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_number_underflow (with error bit) on integer underflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B range
+The start/stop range to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the binary string was converted to an signed long. F_data_not if string starts with a null (length is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_signed_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_signed_detect.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_signed_detect.3
new file mode 100644 (file)
index 0000000..a9e1b3b
--- /dev/null
@@ -0,0 +1,121 @@
+.TH fl_conversion_dynamic_partial_to_signed_detect "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_partial_to_signed_detect \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_partial_to_signed_detect\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_signed_t *const   \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of positive or negative number characters into an f_number_signed_t.
+.PP
+Decimal is used for all other cases.
+.PP
+Leading 0's and whitespace are ignored. Whitespace after the first digit is considered invalid.
+.PP
+This function is similar to strtoll(), but the behavior of error handling and special bases are different. In particular, octals are specified here with '0b' prefix or '0B' prefix instead of the ridiculous '0' prefix.
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found. F_number (with error bit) if parameter is not a number. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_number_underflow (with error bit) on integer underflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number. This auto-detects the base and negative, ignoring the base number and negative flag.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B range
+The start/stop range to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if string starts with a null (length is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_signed_t\fP, \fIstrtoll()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_unsigned.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_unsigned.3
new file mode 100644 (file)
index 0000000..77a391a
--- /dev/null
@@ -0,0 +1,117 @@
+.TH fl_conversion_dynamic_partial_to_unsigned "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_partial_to_unsigned \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_partial_to_unsigned\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_unsigned_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of number characters into a f_number_unsigned_t.
+.PP
+This will stop at one of the following: range.stop or a non-digit. This will ignore NULL values. This will not process signed statuses (+/-).
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_number (with error bit) if no conversion was made due to non-binary values being found. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B range
+The start/stop range to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the binary string was converted to an unsigned long. F_data_not if string starts with a null (length is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_unsigned_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_unsigned_detect.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_partial_to_unsigned_detect.3
new file mode 100644 (file)
index 0000000..2a6b1a9
--- /dev/null
@@ -0,0 +1,121 @@
+.TH fl_conversion_dynamic_partial_to_unsigned_detect "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_partial_to_unsigned_detect \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_partial_to_unsigned_detect\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBf_number_unsigned_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of positive number characters into an f_number_unsigned_t.
+.PP
+Decimal is used for all other cases.
+.PP
+Leading 0's and whitespace are ignored. Whitespace after the first digit is considered invalid.
+.PP
+This function is similar to strtoull(), but the behavior of error handling and special bases are different. In particular, octals are specified here with '0b' prefix or '0B' prefix instead of the ridiculous '0' prefix. Negative values are reported as such instead of being converted into the unsigned equivalent.
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found. F_number (with error bit) if parameter is not a number. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number. This auto-detects the base and negative, ignoring the base number and negative flag.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B range
+The start/stop range to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if string starts with a null (length is 0). F_number_negative on negative value (has a -, such as '-1'). F_number_positive on positive value (has a +, such as '+1').
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_unsigned_t\fP, \fIstrtoull()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_signed.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_signed.3
new file mode 100644 (file)
index 0000000..0b07bae
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fl_conversion_dynamic_to_signed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_to_signed \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_to_signed\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_signed_t *const   \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of number characters into a f_number_signed_t.
+.PP
+This will stop at one of the following: a non-digit. This will ignore NULL values. This will not process signed statuses (+/-).
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_number (with error bit) if no conversion was made due to non-binary values being found. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_number_underflow (with error bit) on integer underflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the binary string was converted to an signed long. F_data_not if string starts with a null (length is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_signed_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_signed_detect.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_signed_detect.3
new file mode 100644 (file)
index 0000000..3bf5f86
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fl_conversion_dynamic_to_signed_detect "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_to_signed_detect \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_to_signed_detect\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_signed_t *const   \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of positive or negative number characters into an f_number_signed_t.
+.PP
+Decimal is used for all other cases.
+.PP
+Leading 0's and whitespace are ignored. Whitespace after the first digit is considered invalid.
+.PP
+This function is similar to strtoll(), but the behavior of error handling and special bases are different. In particular, octals are specified here with '0b' prefix or '0B' prefix instead of the ridiculous '0' prefix.
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found. F_number (with error bit) if parameter is not a number. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_number_underflow (with error bit) on integer underflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number. This auto-detects the base and negative, ignoring the base number and negative flag.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if string starts with a null (length is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_signed_t\fP, \fIstrtoll()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_unsigned.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_unsigned.3
new file mode 100644 (file)
index 0000000..fe72668
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fl_conversion_dynamic_to_unsigned "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_to_unsigned \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_to_unsigned\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_unsigned_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of number characters into a f_number_unsigned_t.
+.PP
+This will stop at one of the following: a non-digit. This will ignore NULL values. This will not process signed statuses (+/-).
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_number (with error bit) if no conversion was made due to non-binary values being found. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay if the binary string was converted to an unsigned long. F_data_not if string starts with a null (length is 0).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_unsigned_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_unsigned_detect.3 b/level_1/fl_conversion/data/documentation/man/man3/fl_conversion_dynamic_to_unsigned_detect.3
new file mode 100644 (file)
index 0000000..c5475c1
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fl_conversion_dynamic_to_unsigned_detect "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_conversion_dynamic_to_unsigned_detect \-
+.SH SYNOPSIS
+.nf
+.B #include <conversion.h>
+.sp
+\fBf_status_t fl_conversion_dynamic_to_unsigned_detect\fP(
+    \fBconst fl_conversion_data_t \fP\fIdata\fP,
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBf_number_unsigned_t *const \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a series of positive number characters into an f_number_unsigned_t.
+.PP
+Decimal is used for all other cases.
+.PP
+Leading 0's and whitespace are ignored. Whitespace after the first digit is considered invalid.
+.PP
+This function is similar to strtoull(), but the behavior of error handling and special bases are different. In particular, octals are specified here with '0b' prefix or '0B' prefix instead of the ridiculous '0' prefix. Negative values are reported as such instead of being converted into the unsigned equivalent.
+.PP
+F_base_not (with error bit) if no supported or valid base unit is provided. F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found. F_number (with error bit) if parameter is not a number. F_number_decimal (with error bit) if number has a decimal digit. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B data
+Conversion data for specifying things such as treating this as a negative number. This auto-detects the base and negative, ignoring the base number and negative flag.
+
+.TP
+.B buffer
+The string to convert.
+
+.TP
+.B number
+This will store the value of the converted string. This value is only changed on success.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for customizing conversion settings for a conversion function to use.
+.PP
+flag: Store flags from fl_conversion_data_flag_*.
+.sp
+.RS
+.nf
+\fB
+struct fl_conversion_data_t {
+  uint8_t  \fIbase\fP;
+  uint16_t \fIflag\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if string starts with a null (length is 0). F_number_negative on negative value (has a -, such as '-1'). F_number_positive on positive value (has a +, such as '+1').
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconversion.h\fP(3), \fIfl_conversion_dynamic_partial_to_signed\fP(3), \fIfl_conversion_dynamic_partial_to_signed_detect\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect\fP(3), \fIfl_conversion_dynamic_to_signed\fP(3), \fIfl_conversion_dynamic_to_signed_detect\fP(3), \fIfl_conversion_dynamic_to_unsigned\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect\fP(3), \fIf_number_unsigned_t\fP, \fIstrtoull()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_directory/data/documentation/man/man3/fl_directory_create.3 b/level_1/fl_directory/data/documentation/man/man3/fl_directory_create.3
new file mode 100644 (file)
index 0000000..720b6a7
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fl_directory_create "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_directory_create \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t fl_directory_create\fP(
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create all directories at the given path.
+.PP
+The paths must not contain NULL except for the terminating NULL. The paths must be NULL terminated.
+.PP
+F_access_denied (with error bit) on access denied. F_directory_not (with error bit) if a supposed directory in path is not actually a directory. F_directory_link_max (with error bit) max links limit reached or exceeded. F_file_found (with error bit) of a directory aleady exists at the path. F_file_found_not (with error bit) if a file within the path is not found (such as a broken symbolic link). F_file_system_quota_block (with error bit) if file system's disk blocks or inodes are exhausted. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_prohibited (with error bit) if file system does not allow for removing. F_read_only (with error bit) if file is read-only. F_space_not (with error bit) if file system is out of space (or file system quota is reached). F_failure (with error bit) on any other error.
+.SH PARAMETERS
+.TP
+.B path
+The file path to the directory.
+
+.TP
+.B mode
+The directory mode to use when creating. This is applied to all created directories.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0. F_directory_found on success, but the directory already exists.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIfl_directory_create\fP(3), \fIfl_directory_do\fP(3), \fIfl_directory_list\fP(3), \fIfl_directory_path_pop\fP(3), \fIfl_directory_path_push\fP(3), \fIf_directory_create()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_directory/data/documentation/man/man3/fl_directory_do.3 b/level_1/fl_directory/data/documentation/man/man3/fl_directory_do.3
new file mode 100644 (file)
index 0000000..6eb73e0
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fl_directory_do "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_directory_do \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBvoid fl_directory_do\fP(
+    \fBconst f_string_static_t         \fP\fIpath\fP,
+    \fBf_directory_recurse_do_t *const \fP\fIrecurse\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform a recursive action on some directory.
+.PP
+This is intended to be used as an alternative to functions like fl_directory_list(), giving more control over the recursion process.
+.PP
+This function is designed and intended to be used on directories.
+.PP
+handle: This callback is for reacting to failures and other error/exceptional cases.
+.PP
+The action() callback must set the error bit on recurse.state.status to trigger the appropriate handle() call.
+.PP
+This always exits on error if, after the handle() callback is called, the recurse.state.status still has the error bit set. The handle() gives the caller more power to do things like report errors or even ignore errors. When ignoring errors, be careful about modifications as some may put the project in an unusual state.
+.PP
+The before action happens before the directory recurse or if not recursing then before the action. The directory recurse happens before the action. The action happens before the after.
+.PP
+The before only happens if recurse.flag has f_directory_recurse_do_flag_before_d. The action only happens if recurse.flag has f_directory_recurse_do_flag_action_d. The after only happens if recurse.flag has f_directory_recurse_do_flag_after_d.
+.PP
+F_skip: Skip the next action, resetting the recurse.state.status to F_okay; Is the same as F_okay if on the last action for some path.
+.PP
+The action() and handle() should check if the recurse is NULL (and any other appropraite NULL checks).
+.PP
+Process top-level directory. 5.1. Process action state on path, flag is f_directory_recurse_do_flag_action_d | f_directory_recurse_do_flag_directory_d | recurse.flag. 5.2. Process after state on path, flag is f_directory_recurse_do_flag_after_d | f_directory_recurse_do_flag_directory_d | recurse.flag.
+.PP
+This value gets pointed to by recurse.path_top. There is potential for problems if the memory pointed to by this string is altered as part of the recursion processing.
+.PP
+This must not be NULL.
+.PP
+This alters recurse.state.status: F_okay on success. F_data_not if source.used or destination.used is 0.
+.PP
+F_directory_descriptor_not (with error bit) on directory file descriptor error. F_directory_not (with error bit) if the directory does not exist. F_directory_open (with error bit) on directory open error. F_directory_stream (with error bit) on directory stream error. F_directory_support_not (with error bit) on directory file descriptor not supported. F_failure (with error bit) if failed to read directory information. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. F_interrupt (with error bit) if stopping due to an interrupt. 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 appended string length is too large to store in the buffer.
+.PP
+Errors (with error bit) from: f_directory_create(). Errors (with error bit) from: f_directory_exists(). Errors (with error bit) from: f_file_mode_set(). Errors (with error bit) from: f_file_role_change(). Errors (with error bit) from: f_file_stat(). Errors (with error bit) from: f_file_stat_at(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_string_dynamic_append_assure(). Errors (with error bit) from: f_string_dynamic_append_assure_nulless().
+.PP
+Errors (with error bit) from: recurse.action(). Errors (with error bit) from: recurse.handle().
+.SH PARAMETERS
+.TP
+.B path
+The directory file path.
+
+.TP
+.B recurse
+The directory recurse data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIfl_directory_create\fP(3), \fIfl_directory_do\fP(3), \fIfl_directory_list\fP(3), \fIfl_directory_path_pop\fP(3), \fIfl_directory_path_push\fP(3), \fIfl_directory_list()\fP, \fIf_directory_create()\fP, \fIf_directory_exists()\fP, \fIf_file_mode_set()\fP, \fIf_file_role_change()\fP, \fIf_file_stat()\fP, \fIf_file_stat_at()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_assure_nulless()\fP, \fIalphasort()\fP, \fIopendir()\fP, \fIscandir()\fP, \fIversionsort()\fP, \fIf_directory_create()\fP, \fIf_directory_exists()\fP, \fIf_file_mode_set()\fP, \fIf_file_role_change()\fP, \fIf_file_stat()\fP, \fIf_file_stat_at()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIrecurse.action()\fP, \fIrecurse.handle()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_directory/data/documentation/man/man3/fl_directory_list.3 b/level_1/fl_directory/data/documentation/man/man3/fl_directory_list.3
new file mode 100644 (file)
index 0000000..f2e58f8
--- /dev/null
@@ -0,0 +1,112 @@
+.TH fl_directory_list "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_directory_list \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t fl_directory_list\fP(
+    \fBconst f_string_static_t          \fP\fIpath\fP,
+    \fBconst f_directory_filter_call_t  \fP\fIfilter\fP,
+    \fBconst f_directory_compare_call_t \fP\fIsort\fP,
+    \fBconst uint8_t                    \fP\fIdereference\fP,
+    \fBf_directory_listing_t *const     \fP\fIlisting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+For some given path, print the names of each file and/or directory inside the directory, stored as a directory listing.
+.PP
+Allows specifying a custom filter and custom sort.
+.PP
+F_directory_descriptor_not (with error bit) on directory file descriptor error. F_directory_found_not (with error bit) if there is not file at the path. F_directory_not (with error bit) if the path is not a directory. F_directory_open (with error bit) on directory open error. F_directory_stream (with error bit) on directory stream error. F_directory_support_not (with error bit) on directory file descriptor not supported. F_failure (with error bit) if failed to read directory information. F_file_descriptor_max (with error bit) if max file descriptors is reached. F_file_open_max (with error bit) too many open files. 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 appended string length is too large to store in the buffer.
+.PP
+Errors (with error bit) from: f_file_stat_at(). Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B path
+Filesystem path to the directory.
+
+.TP
+.B filter
+(optional) A filter function.
+
+.TP
+.B sort
+(optional) A sort function. There are two pre-made libc functions available for this: alphasort() and versionsort().
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B listing
+Will be populated with the names of all top-level paths found within the given directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a listing of paths found within a directory.
+.PP
+Each property represents a set of paths grouped by directory entity file type.
+.PP
+unknown: For anything else.
+.sp
+.RS
+.nf
+\fB
+struct f_directory_listing_t {
+  f_string_dynamics_t \fIblock\fP;
+  f_string_dynamics_t \fIcharacter\fP;
+  f_string_dynamics_t \fIdirectory\fP;
+  f_string_dynamics_t \fIregular\fP;
+  f_string_dynamics_t \fIlink\fP;
+  f_string_dynamics_t \fIfifo\fP;
+  f_string_dynamics_t \fIsocket\fP;
+  f_string_dynamics_t \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source.used or destination.used is 0. F_directory_empty if directory is empty.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIfl_directory_create\fP(3), \fIfl_directory_do\fP(3), \fIfl_directory_list\fP(3), \fIfl_directory_path_pop\fP(3), \fIfl_directory_path_push\fP(3), \fIf_file_stat_at()\fP, \fIf_memory_array_increase_by()\fP, \fIalphasort()\fP, \fIopendir()\fP, \fIscandir()\fP, \fIversionsort()\fP, \fIf_file_stat_at()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_directory/data/documentation/man/man3/fl_directory_path_pop.3 b/level_1/fl_directory/data/documentation/man/man3/fl_directory_path_pop.3
new file mode 100644 (file)
index 0000000..d1ef478
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fl_directory_path_pop "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_directory_path_pop \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t fl_directory_path_pop\fP(
+    \fBf_string_static_t *const \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a path string onto the destination path.
+.PP
+This ensures that there is a trailing '/' after pop. This ignores control characters. This does not dynamically reallocate the string.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if appended string length is too large to store in the buffer.
+.PP
+Errors (with error bit) from: f_utf_is_control().
+.SH PARAMETERS
+.TP
+.B path
+The path to remove a single directory. This will only be NULL terminated if path string is already NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIfl_directory_create\fP(3), \fIfl_directory_do\fP(3), \fIfl_directory_list\fP(3), \fIfl_directory_path_pop\fP(3), \fIfl_directory_path_push\fP(3), \fIf_utf_is_control()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_directory/data/documentation/man/man3/fl_directory_path_push.3 b/level_1/fl_directory/data/documentation/man/man3/fl_directory_path_push.3
new file mode 100644 (file)
index 0000000..c004050
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fl_directory_path_push "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_directory_path_push \-
+.SH SYNOPSIS
+.nf
+.B #include <directory.h>
+.sp
+\fBf_status_t fl_directory_path_push\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a path string onto the destination path.
+.PP
+This ensures that there is a leading and trailing '/' from source. This ignores control characters.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_string_too_large (with error bit) if appended string length is too large to store in the buffer.
+.PP
+Errors (with error bit) from: f_utf_is_control().
+.SH PARAMETERS
+.TP
+.B source
+The path to append onto the destination. This need not be NULL terminated.
+
+.TP
+.B destination
+The destination path to push the path part onto. Any terminating NULLs at the end of the destination string are removed before appending. This will only be NULL terminated if destination string is already NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if source.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdirectory.h\fP(3), \fIfl_directory_create\fP(3), \fIfl_directory_do\fP(3), \fIfl_directory_list\fP(3), \fIfl_directory_path_pop\fP(3), \fIfl_directory_path_push\fP(3), \fIf_utf_is_control()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_environment/data/documentation/man/man3/fl_environment_load_name.3 b/level_1/fl_environment/data/documentation/man/man3/fl_environment_load_name.3
new file mode 100644 (file)
index 0000000..68e5cd2
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fl_environment_load_name "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_environment_load_name \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t fl_environment_load_name\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBf_string_maps_t *const  \fP\fIenvironment\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the given environment variable name and value pair into the given map.
+.PP
+If the environment variable name is not found, then it is not added to the map. If the environment variable name is found but has an empty value, then it is added to the map with an empty value.
+.PP
+Each name and value in the map is NULL terminated after the name.used or size.used.
+.PP
+This does not check for uniqueness in the map.
+.PP
+Errors (with error bit) from: f_environment_get(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_append_nulless().
+.SH PARAMETERS
+.TP
+.B name
+A string representing the environment variable name.
+
+.TP
+.B environment
+An array of maps generated from the loaded environment variable names.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if names.used is 0. F_exist_not if name does not exist.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIfl_environment_load_name\fP(3), \fIfl_environment_load_names\fP(3), \fIfl_environment_path_explode\fP(3), \fIfl_environment_path_explode_reverse\fP(3), \fIf_environment_get()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_environment_get()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_environment/data/documentation/man/man3/fl_environment_load_names.3 b/level_1/fl_environment/data/documentation/man/man3/fl_environment_load_names.3
new file mode 100644 (file)
index 0000000..f893664
--- /dev/null
@@ -0,0 +1,84 @@
+.TH fl_environment_load_names "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_environment_load_names \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t fl_environment_load_names\fP(
+    \fBconst f_string_statics_t \fP\fInames\fP,
+    \fBf_string_maps_t *const   \fP\fIenvironment\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append the given environment variable name and value pairs into the given map.
+.PP
+If the environment variable name is not found, then it is not added to the map. If the environment variable name is found but has an empty value, then it is added to the map with an empty value.
+.PP
+Each name and value in the map is NULL terminated after the name.used or size.used.
+.PP
+This does not check for uniqueness in the map.
+.PP
+Errors (with error bit) from: f_environment_get(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_append_nulless().
+.SH PARAMETERS
+.TP
+.B names
+An array of valid environment variable names. The strings in the array must be NULL terminated.
+
+.TP
+.B environment
+An array of maps generated from the loaded environment variable names. All environment names loaded are appended to this.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if names.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIfl_environment_load_name\fP(3), \fIfl_environment_load_names\fP(3), \fIfl_environment_path_explode\fP(3), \fIfl_environment_path_explode_reverse\fP(3), \fIf_environment_get()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_environment_get()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_environment/data/documentation/man/man3/fl_environment_path_explode.3 b/level_1/fl_environment/data/documentation/man/man3/fl_environment_path_explode.3
new file mode 100644 (file)
index 0000000..bd51750
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fl_environment_path_explode "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_environment_path_explode \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t fl_environment_path_explode\fP(
+    \fBconst f_string_static_t    \fP\fIpath\fP,
+    \fBf_string_dynamics_t *const \fP\fIpaths\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Separate a given PATH-style string into multiple separate paths.
+.PP
+F_array_too_large (with error bit) if paths array is too large for further addressing. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_environment_get() (only when en_kevux_path_architecture_bits is defined). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B path
+The string to process that is expected to follow the traditional Linux standard PATH environment variable. Each seperate path is separated by a single ':'. Need not be NULL terminated. NULLs are ignored and are not copied into the exploded paths.
+
+.TP
+.B paths
+All of the strings exploded from PATH. Each exploded path, when not empty, is guaranteed to have a trailing '/'. Each exploded path is not NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIfl_environment_load_name\fP(3), \fIfl_environment_load_names\fP(3), \fIfl_environment_path_explode\fP(3), \fIfl_environment_path_explode_reverse\fP(3), \fIf_environment_get()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_environment_get()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_environment/data/documentation/man/man3/fl_environment_path_explode_reverse.3 b/level_1/fl_environment/data/documentation/man/man3/fl_environment_path_explode_reverse.3
new file mode 100644 (file)
index 0000000..d09fc71
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fl_environment_path_explode_reverse "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_environment_path_explode_reverse \-
+.SH SYNOPSIS
+.nf
+.B #include <environment.h>
+.sp
+\fBf_status_t fl_environment_path_explode_reverse\fP(
+    \fBconst f_string_static_t    \fP\fIpath\fP,
+    \fBf_string_dynamics_t *const \fP\fIpaths\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Separate a given PATH-style string into multiple separate paths.
+.PP
+The paths are created in reverse order.
+.PP
+F_array_too_large (with error bit) if paths array is too large for further addressing. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_environment_get() (only when en_kevux_path_architecture_bits is defined). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B path
+The string to process that is expected to follow the traditional Linux standard PATH environment variable. Each seperate path is separated by a single ':'. Need not be NULL terminated. NULLs are ignored and are not copied into the exploded paths.
+
+.TP
+.B paths
+All of the strings exploded from PATH. Each exploded path, when not empty, is guaranteed to have a trailing '/'. Each exploded path is not NULL terminated.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIenvironment.h\fP(3), \fIfl_environment_load_name\fP(3), \fIfl_environment_load_names\fP(3), \fIfl_environment_path_explode\fP(3), \fIfl_environment_path_explode_reverse\fP(3), \fIf_environment_get()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_environment_get()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_content_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_content_read.3
new file mode 100644 (file)
index 0000000..0d4f340
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fl_fss_basic_content_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_content_read \-
+.SH SYNOPSIS
+.nf
+.B #include <basic.h>
+.sp
+\fBvoid fl_fss_basic_content_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIfound\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0000 content.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_content on success and content was found (start location is at end of content). F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A set of all locations where a valid content was found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic.h\fP(3), \fIfl_fss_basic_content_read\fP(3), \fIfl_fss_basic_content_write\fP(3), \fIfl_fss_basic_object_read\fP(3), \fIfl_fss_basic_object_write\fP(3), \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_content_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_content_write.3
new file mode 100644 (file)
index 0000000..5ab566b
--- /dev/null
@@ -0,0 +1,111 @@
+.TH fl_fss_basic_content_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_content_write \-
+.SH SYNOPSIS
+.nf
+.B #include <basic.h>
+.sp
+\fBvoid fl_fss_basic_content_write\fP(
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0000 content from a given string.
+.PP
+This will write the given string range as a valid content. Anything within this range will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching the range stop. F_data_not if content is empty (content.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B content
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the content is written. If f_fss_complete_next_e, then the content followed by any appropriate "next" character separating one content from the next, if applicable. If f_fss_complete_end_e, then the content followed by any appropriate "end" character designating the last content for some object, printing final newline, if applicable. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this content, except for the final newline. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this content, including the final newline.
+
+.TP
+.B range
+The start/stop location within the content string to write as an content.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic.h\fP(3), \fIfl_fss_basic_content_read\fP(3), \fIfl_fss_basic_content_write\fP(3), \fIfl_fss_basic_object_read\fP(3), \fIfl_fss_basic_object_write\fP(3), \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_content_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_content_read.3
new file mode 100644 (file)
index 0000000..6f41a7c
--- /dev/null
@@ -0,0 +1,173 @@
+.TH fl_fss_basic_list_content_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_list_content_read \-
+.SH SYNOPSIS
+.nf
+.B #include <basic_list.h>
+.sp
+\fBvoid fl_fss_basic_list_content_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIfound\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0002 Content from a given string.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_content on success and Content is found (start location is at end of Content). F_fss_found_content_not on success and no Content is found (start location is after character designating this is not a Content). F_okay_eos on success after reaching the end of the buffer (a valid Object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid Object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A set of all locations where a valid Content is found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid Content. This only stores comments found within valid Content only. The comment range will include the trailing newline.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic_list.h\fP(3), \fIfl_fss_basic_list_content_read\fP(3), \fIfl_fss_basic_list_content_write\fP(3), \fIfl_fss_basic_list_object_read\fP(3), \fIfl_fss_basic_list_object_write\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_space()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_content_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_content_write.3
new file mode 100644 (file)
index 0000000..ff15817
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fl_fss_basic_list_content_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_list_content_write \-
+.SH SYNOPSIS
+.nf
+.B #include <basic_list.h>
+.sp
+\fBvoid fl_fss_basic_list_content_write\fP(
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst uint8_t                  \fP\fIcomplete\fP,
+    \fBconst f_string_static_t *const \fP\fIprepend\fP,
+    \fBf_range_t *const               \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0002 Content from a given string.
+.PP
+This will write the given string range as a valid Content. Anything within this range will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eol on success after reaching the end of the line. F_okay_eos on success after reaching the end of the buffer. F_data_not if Content is empty (content.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_okay_stop on success after reaching stopping point.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B content
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the Content is written. If f_fss_complete_next_e, then the Content followed by any appropriate "next" character separating one Content from the next, if applicable. If f_fss_complete_end_e, then the Content followed by any appropriate "end" character designating the last Content for some Object, printing final newline, if applicable. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this Content, except for the final newline. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this Content, including the final newline.
+
+.TP
+.B prepend
+(optional) A string of whitespace to prepend at the start of each line. This should only be whitespace, anything else could produce invalid Content.
+
+.TP
+.B range
+The start/stop location within the Content string to write as an Content.
+
+.TP
+.B destination
+The buffer where the Content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic_list.h\fP(3), \fIfl_fss_basic_list_content_read\fP(3), \fIfl_fss_basic_list_content_write\fP(3), \fIfl_fss_basic_list_object_read\fP(3), \fIfl_fss_basic_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_object_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_object_read.3
new file mode 100644 (file)
index 0000000..078704b
--- /dev/null
@@ -0,0 +1,150 @@
+.TH fl_fss_basic_list_object_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_list_object_read \-
+.SH SYNOPSIS
+.nf
+.B #include <basic_list.h>
+.sp
+\fBvoid fl_fss_basic_list_object_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_range_t *const            \fP\fIfound\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0002 Object.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_object on success and Object is found (start location is at end of Object). F_fss_found_object_not on success and no Object is found (start location is after character designating this is not an Object). F_okay_eos on success after reaching the end of the buffer (a valid Object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid Object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_is_zero_width(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A location where a valid Object is found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic_list.h\fP(3), \fIfl_fss_basic_list_content_read\fP(3), \fIfl_fss_basic_list_content_write\fP(3), \fIfl_fss_basic_list_object_read\fP(3), \fIfl_fss_basic_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_object_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_list_object_write.3
new file mode 100644 (file)
index 0000000..51a9bad
--- /dev/null
@@ -0,0 +1,111 @@
+.TH fl_fss_basic_list_object_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_list_object_write \-
+.SH SYNOPSIS
+.nf
+.B #include <basic_list.h>
+.sp
+\fBvoid fl_fss_basic_list_object_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0002 Object.
+.PP
+This will write the given string range as a valid Object. Anything within this range will be escaped as necessary. This will stop if EOL is reached.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_data_not if Object is empty (object.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_okay_stop on success after reaching stopping point.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B object
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the Object name is written. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this Object. If f_fss_complete_full_trim_e, this will write any appropriate open and close aspects of this Object, but will omit whitespace before and after the Object. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this Object. If f_fss_complete_partial_tim, this will write any appropriate open and close aspects of this Object, but will omit whitespace before and after the Object.
+
+.TP
+.B range
+The start/stop location within the Object string to write as an Object.
+
+.TP
+.B destination
+The buffer where the Object is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic_list.h\fP(3), \fIfl_fss_basic_list_content_read\fP(3), \fIfl_fss_basic_list_content_write\fP(3), \fIfl_fss_basic_list_object_read\fP(3), \fIfl_fss_basic_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_object_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_object_read.3
new file mode 100644 (file)
index 0000000..4c17fcc
--- /dev/null
@@ -0,0 +1,155 @@
+.TH fl_fss_basic_object_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_object_read \-
+.SH SYNOPSIS
+.nf
+.B #include <basic.h>
+.sp
+\fBvoid fl_fss_basic_object_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_range_t *const            \fP\fIfound\fP,
+    \fBuint8_t *const              \fP\fIquote\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0000 object.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_object on success and object was found (start location is at end of object). F_fss_found_object_content_not on success but object ended at the line so there can be no content. F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_is_zero_width(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A location where a valid object was found.
+
+.TP
+.B quote
+(optional) This will store the quote type representing the character to use (from the f_fss_quote_type_*_e).
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic.h\fP(3), \fIfl_fss_basic_content_read\fP(3), \fIfl_fss_basic_content_write\fP(3), \fIfl_fss_basic_object_read\fP(3), \fIfl_fss_basic_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_object_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_basic_object_write.3
new file mode 100644 (file)
index 0000000..4757271
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fl_fss_basic_object_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_basic_object_write \-
+.SH SYNOPSIS
+.nf
+.B #include <basic.h>
+.sp
+\fBvoid fl_fss_basic_object_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst uint8_t             \fP\fIquote\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0000 object from a given string.
+.PP
+This will write the given string range as a valid object. Anything within this range will be escaped as necessary. This will stop if EOL is reached.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching the range stop. F_data_not if object is empty (object.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B object
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B quote
+If 0, then double quotes are auto-inserted, when required. Otherwise, this is quote character to wrap the object in when writing.
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the object name is written. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_full_trim_e, this will write any appropriate open and close aspects of this object, but will omit whitespace before and after the object (inside the quotes). If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_partial_trim, this will write any appropriate open and close aspects of this object, but will omit whitespace before and after the object (inside the quotes).
+
+.TP
+.B range
+The start/stop location within the object string to write as an object.
+
+.TP
+.B destination
+The buffer where the object is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic.h\fP(3), \fIfl_fss_basic_content_read\fP(3), \fIfl_fss_basic_content_write\fP(3), \fIfl_fss_basic_object_read\fP(3), \fIfl_fss_basic_object_write\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_content_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_content_read.3
new file mode 100644 (file)
index 0000000..e735e85
--- /dev/null
@@ -0,0 +1,179 @@
+.TH fl_fss_embedded_list_content_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_embedded_list_content_read \-
+.SH SYNOPSIS
+.nf
+.B #include <embedded_list.h>
+.sp
+\fBvoid fl_fss_embedded_list_content_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_fss_nest_t *const         \fP\fIfound\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0008 content.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+This operates on the assumption that found.array[0].array[found.array[0].used].content is the current content being processed. Therefore the object for this content will also need to be found.array[0].array[found.array[0].used].object. The object at depth 0 will not be populated, but all nested objects will be populated at their respective depth along with the content.
+.PP
+The state.data must be of type fl_fss_data_embedded_list_t with all properties as valid.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_content on success and content was found (start location is at end of content). F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_eos If EOS was reached before the Content at depth 0 was fully terminated. F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached. F_end_not_nest_eos If EOS was reached before the Content at depth 1 or greater was fully terminated. F_end_not_nest_stop If stop point was reached before the Content at depth 1 or greater was fully terminated. F_end_not_stop If stop point was reached before the Content at depth 0 was fully terminated.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A set of all locations where a valid content was found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid content. This only stores comments found within valid content only. The comment range will include the trailing newline.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_fss_items_t.
+.PP
+Each array row represents the nesting depth. The top-level will not have any parent, so "parent" must be ignored on anything at index 0. The parent identifier is expected to reference a position in the nesting depth immediately above it.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_nest_t {
+  f_fss_items_t      *\fIdepth\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIembedded_list.h\fP(3), \fIfl_fss_embedded_list_content_read\fP(3), \fIfl_fss_embedded_list_content_write\fP(3), \fIfl_fss_embedded_list_object_read\fP(3), \fIfl_fss_embedded_list_object_write\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_space()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_content_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_content_write.3
new file mode 100644 (file)
index 0000000..af8a256
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fl_fss_embedded_list_content_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_embedded_list_content_write \-
+.SH SYNOPSIS
+.nf
+.B #include <embedded_list.h>
+.sp
+\fBvoid fl_fss_embedded_list_content_write\fP(
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst uint8_t                  \fP\fIcomplete\fP,
+    \fBconst f_string_static_t *const \fP\fIprepend\fP,
+    \fBconst f_ranges_t *const        \fP\fIignore\fP,
+    \fBf_range_t *const               \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0008 content from a given string.
+.PP
+This will write the given string range as a valid content. Anything within this range will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_data_not if content is empty (content.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_okay_stop on success after reaching stopping point.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B content
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the content is written. If f_fss_complete_next_e, then the content followed by any appropriate "next" character separating one content from the next, if applicable. If f_fss_complete_end_e, then the content followed by any appropriate "end" character designating the last content for some object, printing final newline, if applicable. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this content, except for the final newline. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this content, including the final newline.
+
+.TP
+.B prepend
+(optional) A string of whitespace to prepend at the start of each line. This should only be whitespace, anything else could produce invalid content.
+
+.TP
+.B ignore
+(optional) A list of ranges within the string to ignore. These ranges are only checked/ignored if there is a valid nested object open or a valid nested object close. Any valid nested object open or valid nested object close inside an ingore range will not be escaped.
+
+.TP
+.B range
+The start/stop location within the content string to write as an content.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIembedded_list.h\fP(3), \fIfl_fss_embedded_list_content_read\fP(3), \fIfl_fss_embedded_list_content_write\fP(3), \fIfl_fss_embedded_list_object_read\fP(3), \fIfl_fss_embedded_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_object_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_object_read.3
new file mode 100644 (file)
index 0000000..ce3ee69
--- /dev/null
@@ -0,0 +1,150 @@
+.TH fl_fss_embedded_list_object_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_embedded_list_object_read \-
+.SH SYNOPSIS
+.nf
+.B #include <embedded_list.h>
+.sp
+\fBvoid fl_fss_embedded_list_object_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_range_t *const            \fP\fIfound\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0008 object.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_object on success and object was found (start location is at end of object). F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_is_zero_width(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A location where a valid object was found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIembedded_list.h\fP(3), \fIfl_fss_embedded_list_content_read\fP(3), \fIfl_fss_embedded_list_content_write\fP(3), \fIfl_fss_embedded_list_object_read\fP(3), \fIfl_fss_embedded_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_object_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_embedded_list_object_write.3
new file mode 100644 (file)
index 0000000..edab4fd
--- /dev/null
@@ -0,0 +1,111 @@
+.TH fl_fss_embedded_list_object_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_embedded_list_object_write \-
+.SH SYNOPSIS
+.nf
+.B #include <embedded_list.h>
+.sp
+\fBvoid fl_fss_embedded_list_object_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0008 object from a given string.
+.PP
+This will write the given string range as a valid object. Anything within this range will be escaped as necessary. This will stop if EOL is reached.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_data_not if object is empty (object.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_okay_stop on success after reaching stopping point.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B object
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the object name is written. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_full_trim_e, this will write any appropriate open and close aspects of this object, but will omit whitespace before and after the object. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_partial_tim, this will write any appropriate open and close aspects of this object, but will omit whitespace before and after the object.
+
+.TP
+.B range
+The start/stop location within the object string to write as an object.
+
+.TP
+.B destination
+The buffer where the object is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIembedded_list.h\fP(3), \fIfl_fss_embedded_list_content_read\fP(3), \fIfl_fss_embedded_list_content_write\fP(3), \fIfl_fss_embedded_list_object_read\fP(3), \fIfl_fss_embedded_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memoy_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_content_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_content_read.3
new file mode 100644 (file)
index 0000000..54586ec
--- /dev/null
@@ -0,0 +1,177 @@
+.TH fl_fss_extended_content_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_content_read \-
+.SH SYNOPSIS
+.nf
+.B #include <extended.h>
+.sp
+\fBvoid fl_fss_extended_content_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIfound\fP,
+    \fBf_uint8s_t *const           \fP\fIquotes\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0001 content.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+f_fss_state_quote_not_e: Explicitly disable quotes, treating quotes and their respective delimits as normal characters.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_content on success and content was found (start location is at end of content). F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_is_zero_width(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A set of all locations where a valid content was found.
+
+.TP
+.B quotes
+(optional) This will store the quote type representing the character to use (from the f_fss_quote_type_*_e). Each index in quotes represents a position within the found array index.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint8_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint8s_t {
+  uint8_t            *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended.h\fP(3), \fIfl_fss_extended_content_read\fP(3), \fIfl_fss_extended_content_write\fP(3), \fIfl_fss_extended_object_read\fP(3), \fIfl_fss_extended_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_utf_buffer_increment()\fP, \fIfl_fss_basic_object_read()\fP, \fIfl_fss_extended_object_read()\fP, \fIfl_fss_extended_content_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_content_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_content_write.3
new file mode 100644 (file)
index 0000000..280761a
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fl_fss_extended_content_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_content_write \-
+.SH SYNOPSIS
+.nf
+.B #include <extended.h>
+.sp
+\fBvoid fl_fss_extended_content_write\fP(
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst uint8_t             \fP\fIquote\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0001 content from a given string.
+.PP
+This will write the given string range as a valid content. Anything within this range will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching the range stop. F_data_not if content is empty (content.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B content
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B quote
+If 0, then double quotes are auto-inserted, when required. Otherwise, this is quote character to wrap the object in when writing.
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the content is written. If f_fss_complete_next_e, then the content followed by any appropriate "next" character separating one content from the next, if applicable. If f_fss_complete_end_e, then the content followed by any appropriate "end" character designating the last content for some object, printing final newline, if applicable. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this content, except for the final newline. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this content, including the final newline.
+
+.TP
+.B range
+The start/stop location within the content string to write as an content.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended.h\fP(3), \fIfl_fss_extended_content_read\fP(3), \fIfl_fss_extended_content_write\fP(3), \fIfl_fss_extended_object_read\fP(3), \fIfl_fss_extended_object_write\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIfl_fss_basic_object_write()\fP, \fIfl_fss_extended_object_write()\fP, \fIfl_fss_extended_content_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_content_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_content_read.3
new file mode 100644 (file)
index 0000000..bec4918
--- /dev/null
@@ -0,0 +1,200 @@
+.TH fl_fss_extended_list_content_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_list_content_read \-
+.SH SYNOPSIS
+.nf
+.B #include <extended_list.h>
+.sp
+\fBvoid fl_fss_extended_list_content_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIfound\fP,
+    \fBf_range_t *const            \fP\fIclose\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0003 content.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+This does not utilize recursion and has a max content depth of 1, see fss-0008 (Embedded List) for that purpose.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_content on success and content was found (start location is at end of content). F_fss_found_content_not on success and no content was found (start location is after character designating this is not a content). F_okay_eos on success after reaching the end of the buffer (a valid content is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid content is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no content found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no content found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A set of all locations where a valid content was found.
+
+.TP
+.B close
+A location where a valid Object close is found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid content. This only stores comments found within valid content only. The comment range will include the trailing newline.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended_list.h\fP(3), \fIfl_fss_extended_list_content_read\fP(3), \fIfl_fss_extended_list_content_write\fP(3), \fIfl_fss_extended_list_object_read\fP(3), \fIfl_fss_extended_list_object_write\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_space()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_content_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_content_write.3
new file mode 100644 (file)
index 0000000..94c46ee
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fl_fss_extended_list_content_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_list_content_write \-
+.SH SYNOPSIS
+.nf
+.B #include <extended_list.h>
+.sp
+\fBvoid fl_fss_extended_list_content_write\fP(
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst uint8_t                  \fP\fIcomplete\fP,
+    \fBconst f_string_static_t *const \fP\fIprepend\fP,
+    \fBconst f_ranges_t *const        \fP\fIignore\fP,
+    \fBf_range_t *const               \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0003 content from a given string.
+.PP
+This will write the given string range as a valid content. Anything within this range will be escaped as necessary.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_data_not if content is empty (content.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_okay_stop on success after reaching stopping point.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B content
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the content is written. If f_fss_complete_next_e, then the content followed by any appropriate "next" character separating one content from the next, if applicable. If f_fss_complete_end_e, then the content followed by any appropriate "end" character designating the last content for some object, printing final newline, if applicable. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this content, except for the final newline. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this content, including the final newline.
+
+.TP
+.B prepend
+(optional) A string of whitespace to prepend at the start of each line. This should only be whitespace, anything else could produce invalid content.
+
+.TP
+.B ignore
+(optional) A list of ranges within the string to ignore. These ranges are only checked/ignored if there is a valid nested object open or a valid nested object close. Any valid nested object open or valid nested object close inside an ingore range will not be escaped.
+
+.TP
+.B range
+The start/stop location within the content string to write as an content.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended_list.h\fP(3), \fIfl_fss_extended_list_content_read\fP(3), \fIfl_fss_extended_list_content_write\fP(3), \fIfl_fss_extended_list_object_read\fP(3), \fIfl_fss_extended_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_object_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_object_read.3
new file mode 100644 (file)
index 0000000..f1ad6e5
--- /dev/null
@@ -0,0 +1,150 @@
+.TH fl_fss_extended_list_object_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_list_object_read \-
+.SH SYNOPSIS
+.nf
+.B #include <extended_list.h>
+.sp
+\fBvoid fl_fss_extended_list_object_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_range_t *const            \fP\fIfound\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0003 object.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_object on success and object was found (start location is at end of object). F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_is_zero_width(). Errors (with error bit) from: f_fss_seek_to_eol(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A location where a valid Object is found.
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended_list.h\fP(3), \fIfl_fss_extended_list_content_read\fP(3), \fIfl_fss_extended_list_content_write\fP(3), \fIfl_fss_extended_list_object_read\fP(3), \fIfl_fss_extended_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_seek_to_eol()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_object_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_list_object_write.3
new file mode 100644 (file)
index 0000000..e4da9b3
--- /dev/null
@@ -0,0 +1,111 @@
+.TH fl_fss_extended_list_object_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_list_object_write \-
+.SH SYNOPSIS
+.nf
+.B #include <extended_list.h>
+.sp
+\fBvoid fl_fss_extended_list_object_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0003 object from a given string.
+.PP
+This will write the given string range as a valid object. Anything within this range will be escaped as necessary. This will stop if EOL is reached.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_data_not if object is empty (object.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_okay_stop on success after reaching stopping point.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B object
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the object name is written. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_full_trim_e, this will write any appropriate open and close aspects of this object, but will omit whitespace before and after the object. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_partial_tim, this will write any appropriate open and close aspects of this object, but will omit whitespace before and after the object.
+
+.TP
+.B range
+The start/stop location within the object string to write as an object.
+
+.TP
+.B destination
+The buffer where the object is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended_list.h\fP(3), \fIfl_fss_extended_list_content_read\fP(3), \fIfl_fss_extended_list_content_write\fP(3), \fIfl_fss_extended_list_object_read\fP(3), \fIfl_fss_extended_list_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_buffer_increment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_object_read.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_object_read.3
new file mode 100644 (file)
index 0000000..030a7f6
--- /dev/null
@@ -0,0 +1,155 @@
+.TH fl_fss_extended_object_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_object_read \-
+.SH SYNOPSIS
+.nf
+.B #include <extended.h>
+.sp
+\fBvoid fl_fss_extended_object_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_range_t *const            \fP\fIfound\fP,
+    \fBuint8_t *const              \fP\fIquote\fP,
+    \fBf_number_unsigneds_t *const \fP\fIdelimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read an fss-0001 object.
+.PP
+This will record where delimit placeholders exist but will not apply the delimits.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_fss_found_object on success and object was found (start location is at end of object). F_fss_found_object_content_not on success but object ended at the line so there can be no content. F_fss_found_object_not on success and no object was found (start location is after character designating this is not an object). F_okay_eos on success after reaching the end of the buffer (a valid object is not yet confirmed). F_okay_stop on success after reaching stopping point (a valid object is not yet confirmed). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no objects found after reaching the end of the buffer (essentially only comments are found). F_data_not_stop no data found after reaching stopping point (essentially only comments are found). F_end_not_group_eos if EOS was reached before the a group termination was reached. F_end_not_group_stop if stop point was reached before the a group termination was reached.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_graph(). Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_is_zero_width(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_utf_buffer_increment().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B found
+A location where a valid object was found.
+
+.TP
+.B quote
+(optional) This will store the quote type representing the character to use (from the f_fss_quote_type_*_e).
+
+.TP
+.B delimits
+A delimits array representing where delimits exist within the buffer.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended.h\fP(3), \fIfl_fss_extended_content_read\fP(3), \fIfl_fss_extended_content_write\fP(3), \fIfl_fss_extended_object_read\fP(3), \fIfl_fss_extended_object_write\fP(3), \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_utf_buffer_increment()\fP, \fIf_fss_is_graph()\fP, \fIf_fss_is_space()\fP, \fIf_fss_is_zero_width()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_utf_buffer_increment()\fP, \fIfl_fss_basic_object_read()\fP, \fIfl_fss_extended_object_read()\fP, \fIfl_fss_extended_content_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_object_write.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_extended_object_write.3
new file mode 100644 (file)
index 0000000..d1f7700
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fl_fss_extended_object_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_extended_object_write \-
+.SH SYNOPSIS
+.nf
+.B #include <extended.h>
+.sp
+\fBvoid fl_fss_extended_object_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst uint8_t             \fP\fIquote\fP,
+    \fBconst uint8_t             \fP\fIcomplete\fP,
+    \fBf_range_t *const          \fP\fIrange\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write an fss-0001 object from a given string.
+.PP
+This will write the given string range as a valid object. Anything within this range will be escaped as necessary. This will stop if EOL is reached.
+.PP
+The destination string may have NULLs.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching the range stop. F_data_not if object is empty (object.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_okay_eol (with error bit) after reaching an EOL, which is not supported by the standard. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_fss_is_space(). Errors (with error bit) from: f_fss_skip_past_delimit(). Errors (with error bit) from: f_fss_skip_past_space(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by().
+.SH PARAMETERS
+.TP
+.B object
+The string to write as (does not stop at NULLS, they are ignored and not written).
+
+.TP
+.B quote
+If 0, then double quotes are auto-inserted, when required. Otherwise, this is quote character to wrap the object in when writing.
+
+.TP
+.B complete
+If f_fss_complete_none_e, then only the object name is written. If f_fss_complete_full_e, this will write any appropriate open and close aspects of this object. If f_fss_complete_partial_e, this will write any appropriate open and close aspects of this object.
+
+.TP
+.B range
+The start/stop location within the object string to write as an object.
+
+.TP
+.B destination
+The buffer where the object is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended.h\fP(3), \fIfl_fss_extended_content_read\fP(3), \fIfl_fss_extended_content_write\fP(3), \fIfl_fss_extended_object_read\fP(3), \fIfl_fss_extended_object_write\fP(3), \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_fss_is_space()\fP, \fIf_fss_skip_past_delimit()\fP, \fIf_fss_skip_past_space()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_fss/data/documentation/man/man3/fl_fss_payload_header_map.3 b/level_1/fl_fss/data/documentation/man/man3/fl_fss_payload_header_map.3
new file mode 100644 (file)
index 0000000..35fe316
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fl_fss_payload_header_map "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_fss_payload_header_map \-
+.SH SYNOPSIS
+.nf
+.B #include <payload.h>
+.sp
+\fBvoid fl_fss_payload_header_map\fP(
+    \fBconst f_abstruse_maps_t \fP\fIheaders\fP,
+    \fBf_string_maps_t *const  \fP\fIdestinations\fP,
+    \fBf_state_t *const        \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write standard header of the FSS-000E (Payload).
+.PP
+voids.
+.PP
+Any f_abstruse_strings_e must be NULL terminated.
+.PP
+For dynamic string data, such as f_abstruse_dynamic_e and f_abstruse_map_e, an empty quoted string is printed if the ".used" is 0.
+.PP
+The optional state->handle() is called on error and the handler may alter the status to not have an error bit step to prevent returning except for when there is an invalid parameter passed to this function. The second parameter is a fl_fss_payload_header_internal_t. The second parameter to state->handle() is NULL on invalid paramter passed to this function.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored. The second parameter is a fl_fss_payload_header_internal_t.
+.PP
+Must not be NULL.
+.PP
+This alters state.status: F_okay on success. F_data_not if headers is empty (headers.used is 0).
+.PP
+F_interrupt (with error bit) if stopping due to an interrupt. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_append_nulless(). Errors (with error bit) from: f_string_dynamic_strip_null(). Errors (with error bit) from: f_string_dynamic_strip_null_range().
+.SH PARAMETERS
+.TP
+.B headers
+An abstruse map representing individual headers. Ultimately, all headers are cast to a string or a binary representation (depending on implementation).
+
+.TP
+.B destinations
+A map of strings representing the header names and values after being safely converted into the valid payload header format. This built header names and values are appended onto this.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. The state.handle() is optionally allowed. There is no "callbacks" structure. The data is required and set to fl_fss_payload_header_state_t. The data.cache must not be NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of f_abstruse_map_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_abstruse_maps_t {
+  f_abstruse_map_t   *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpayload.h\fP(3), \fIfl_fss_payload_header_map\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_strip_null()\fP, \fIf_string_dynamic_strip_null_range()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_strip_null()\fP, \fIf_string_dynamic_strip_null_range()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_iki/data/documentation/man/man3/fl_iki_eki_read.3 b/level_1/fl_iki/data/documentation/man/man3/fl_iki_eki_read.3
new file mode 100644 (file)
index 0000000..fdacdee
--- /dev/null
@@ -0,0 +1,118 @@
+.TH fl_iki_eki_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_iki_eki_read \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBvoid fl_iki_eki_read\fP(
+    \fBf_string_static_t *const \fP\fIbuffer\fP,
+    \fBf_range_t *const         \fP\fIrange\fP,
+    \fBf_iki_eki_t *const       \fP\fIdata\fP,
+    \fBf_state_t *const         \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read all EKI Vocabulary and Content in the given range of the given buffer.
+.PP
+This does not verify if any vocabulary name is known. This only finds complete vocabulary names and their respective content.
+.PP
+This alters state.status: F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_iki_eki_read(). Errors (with error bit) from: f_iki_eki_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B data
+The EKI data.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. This must not be NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the EKI data (extended IKI data).
+.PP
+vocabularys: A set of ranges representing the vocabularies (variable names) list to store each found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_eki_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_rangess_t          \fIvocabularys\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIfl_iki_eki_read\fP(3), \fIfl_iki_read\fP(3), \fIf_iki_eki_read()\fP, \fIf_iki_eki_read()\fP, \fIf_iki_eki_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_iki/data/documentation/man/man3/fl_iki_read.3 b/level_1/fl_iki/data/documentation/man/man3/fl_iki_read.3
new file mode 100644 (file)
index 0000000..9c8b39e
--- /dev/null
@@ -0,0 +1,118 @@
+.TH fl_iki_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_iki_read \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBvoid fl_iki_read\fP(
+    \fBf_string_static_t *const \fP\fIbuffer\fP,
+    \fBf_range_t *const         \fP\fIrange\fP,
+    \fBf_iki_data_t *const      \fP\fIdata\fP,
+    \fBf_state_t *const         \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read all IKI Vocabulary and Content in the given range of the given buffer.
+.PP
+This does not verify if any vocabulary name is known. This only finds complete vocabulary names and their respective content.
+.PP
+This alters state.status: F_parameter (with error bit) if a parameter is invalid.
+.PP
+Success from: f_iki_read(). Errors (with error bit) from: f_iki_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B range
+The start/stop location within the buffer to be processed. The start location will be updated as the buffer is being processed. The start location will represent where the read stopped on return. A start location past the stop location or buffer used means that the entire range was processed.
+
+.TP
+.B data
+The IKI data.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. This must not be NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIfl_iki_eki_read\fP(3), \fIfl_iki_read\fP(3), \fIf_iki_read()\fP, \fIf_iki_read()\fP, \fIf_iki_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_path/data/documentation/man/man3/fl_path_canonical.3 b/level_1/fl_path/data/documentation/man/man3/fl_path_canonical.3
new file mode 100644 (file)
index 0000000..6139b7b
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fl_path_canonical "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_path_canonical \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t fl_path_canonical\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBf_string_dynamic_t *const \fP\fIcanonical\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the canonical (real) path for some path.
+.PP
+This does not check if the path exists or not. This processes the relative parts: './', '../', and extra '/'. This does not process symbolic links. This has a max size of F_string_t_size_d. This removes trailing slashes, but leaves the leading slash ('/' remains as-is, but '/a/' becomes '/a'). This removes redundant slashes '/'.
+.PP
+An empty path (first character is NULL or path.used is 0) appends only the current path to canonical.
+.PP
+Errors (with error bit) from: f_path_current(). Errors (with error bit) from: f_string_append_nulless(). Errors (with error bit) from: f_string_dynamic_append_assure().
+.SH PARAMETERS
+.TP
+.B path
+The source path to determine what the canonical path is. NULLs within the path are not copied to the canonical. This need not be NULL terminated.
+
+.TP
+.B canonical
+The (allocated) canonical file path. This will be NULL terminated at canonical->used + 1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIfl_path_canonical\fP(3), \fIfl_path_clean\fP(3), \fIf_path_current()\fP, \fIf_string_append_nulless()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_path_current()\fP, \fIf_string_append_nulless()\fP, \fIf_string_dynamic_append_assure()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_path/data/documentation/man/man3/fl_path_clean.3 b/level_1/fl_path/data/documentation/man/man3/fl_path_clean.3
new file mode 100644 (file)
index 0000000..53faeb0
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fl_path_clean "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_path_clean \-
+.SH SYNOPSIS
+.nf
+.B #include <path.h>
+.sp
+\fBf_status_t fl_path_clean\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBf_string_dynamic_t *const \fP\fIclean\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the cleaned up path for some path, removing redundant slashes.
+.PP
+This does not check if the path exists or not. This leaves relative parts in place: './', '../', and extra '/'. This does not process symbolic links. This has a max size of F_string_t_size_d. This removes trailing slashes, but leaves the leading slash ('/' remains as-is, but '/a/' becomes '/a'). This removes redundant slashes '/'. This removes NULL characters.
+.PP
+An empty path (first character is NULL or path.used is 0) appends only the current path to canonical.
+.PP
+Errors (with error bit) from: f_string_append_nulless(). Errors (with error bit) from: f_string_dynamic_append_assure().
+.SH PARAMETERS
+.TP
+.B path
+The source path to determine what the canonical path is. NULLs within the path are not copied to the clean. This need not be NULL terminated.
+
+.TP
+.B clean
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath.h\fP(3), \fIfl_path_canonical\fP(3), \fIfl_path_clean\fP(3), \fIf_string_append_nulless()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_append_nulless()\fP, \fIf_string_dynamic_append_assure()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_format.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_format.3
new file mode 100644 (file)
index 0000000..3ac0657
--- /dev/null
@@ -0,0 +1,108 @@
+.TH fl_print_format "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_format \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_format\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP,
+    \fB...              \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A formatted print function similar to (but not the same as) the c-library fprintf() function.
+.PP
+This function attempts to operate as closely to how fprintf() operates, however, there are notable differences.
+.PP
+This formatted print provides replacement variables for specific types of the FLL project, such f_string_static_t. There is support for safe printing where certain control characters or invalid UTF-8 sequences are not directly printed. There is support for color context printing. There is support for more digit base forms than those provided by fprintf() such as base-2 (binary) or base-12 (duodecimal).
+.PP
+The reserved formatting character is only the '' character, which may be escaped by a second '' character. This '' character designates the start of a format flag sequence which must be ended by another '' or a format character. A '' at the end of the string is considered invalid.
+.PP
+Each formatting flags is followed by basic flag or base flag and end on a type flag. The basic, base, and type format flags are represented by a discrete set of reserved characters.
+.PP
+Each basic format flags may be specified in any order but must be specified before the type flag. The order in which basic format flags are processed in regards parameters is a present order irrespective to the order specified. The basic format flags "/", ";", and ":" are examples of this.
+.PP
+"G": Round and convert to notation of either decimal or exponent.
+.PP
+The default format is decimal: [-]ddd.ddd.
+.PP
+The case-sensitivity of above, such as 'e' vs 'E,' does not replace or relate to the case-sensitivity meaning of 'd' or 'D'. Instead, when 'e' is specified 'e' is used (such as such as [-]d.ddde±dd), but when 'E' is specified, then 'E' is used (such as [-]d.dddE±dd).
+.PP
+Note: Currently the float/double implementation does not support the notation modes except integer (default) or hexidecimal. This is not intended but is simply a result of the temporary use of sprintf() to perform these operations. Once a custom implementation is provided, replacing snprintf(), then this can properly support the notation modes. Therefore, this function is supposed to support notation modes and does not yet do this (@fixme/
+.PP
+This "%$" sequence is used to prevent characters from being interpreted. For example, consider "%de" vs "%d%$e". The first case "%de" is interpretted as a double using the "e" notation. The second case "%d%$e" is interpretted as a double followed by the letter "e".
+.PP
+For these basic format flags ("/", ";", and ":"), the order is always processed as: 1) static/dynamic string. 2) partial range. 3) ignore at. 4) ignore in.
+.PP
+hexidecimal: 0x/0X, representing base-16 units.
+.PP
+When printing digits, using lowercase designates to print alphabetic digits in lowercase and using uppercase designates to print alphabetic digits in uppercase.
+.PP
+To keep the design simple, this does not support index position variable replacement like fprintf() does (such as '%1$', '%2$', etc..).
+.PP
+".*", For number-based values, designates that the precision is specified in the parameter (order is: (precision, value), but if . is specified, then order is: (width, precision, value)).
+.PP
+"_": Display digits in Hexidecimal notation.
+.PP
+"%": Use left-justification.
+.PP
+"un", "UN": Type is a f_number_unsigned_t digit (which by default is what f_number_unsigned_t is a type of).
+.PP
+"�": Unknown/Invalid.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_eos (with error bit) on EOS reached. F_output (with error bit) on failure to print to the output file. F_parameter (with error bit) if a parameter is invalid. F_valid_not (with error bit) on invalid syntax (such as terminating the string on a single '').
+.PP
+Errors (with error bit) from: f_conversion_number_signed_print(). Errors (with error bit) from: f_conversion_number_unsigned_print(). Errors (with error bit) from: f_print_dynamic(). Errors (with error bit) from: f_print_dynamic_raw(). Errors (with error bit) from: f_print_dynamic_safely(). Errors (with error bit) from: f_print_safely(). Errors (with error bit) from: f_print_terminated().
+.SH PARAMETERS
+.TP
+.B string
+The formatted string to process and output. This is a NULL terminated string.
+
+.TP
+.B file
+
+.TP
+.B
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_conversion_number_signed_print()\fP, \fIf_conversion_number_unsigned_print()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP, \fIfprintf()\fP, \fIfputc_unlocked()\fP, \fIsnprintf()\fP, \fIva_copy()\fP, \fIva_end()\fP, \fIva_start()\fP, \fIf_conversion_number_signed_print()\fP, \fIf_conversion_number_unsigned_print()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_format_convert.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_format_convert.3
new file mode 100644 (file)
index 0000000..45f4868
--- /dev/null
@@ -0,0 +1,82 @@
+.TH fl_print_format_convert "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_format_convert \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_string_t fl_print_format_convert\fP(
+    \fBconst f_string_t  \fP\fIstring\fP,
+    \fBconst f_file_t    \fP\fIfile\fP,
+    \fBva_list           \fP\fIap\fP,
+    \fBf_status_t *const \fP\fIstatus\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert and print a single part of a formatted string represented by the ''.
+.PP
+This should be called after each first '' is encountered. This should return only after a single '' group is fully processed, end of current is reached, or an error occurs.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+The status parameter will be set as follows on return: F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.PP
+F_output (with error bit) on failure to print to the output file. 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_valid_not (with error bit) on invalid syntax (such as terminating the string on a single '').
+.PP
+Success from: f_print_dynamic(). Success from: f_print_dynamic_raw(). Success from: f_print_dynamic_safely(). Success from: f_print_safely(). Success from: f_print_terminated().
+.PP
+Errors (with error bit) from: f_conversion_number_signed_print(). Errors (with error bit) from: f_conversion_number_unsigned_print(). Errors (with error bit) from: f_print_dynamic(). Errors (with error bit) from: f_print_dynamic_raw(). Errors (with error bit) from: f_print_dynamic_safely(). Errors (with error bit) from: f_print_safely(). Errors (with error bit) from: f_print_terminated().
+.SH PARAMETERS
+.TP
+.B string
+The current character position within the string. This pointer might be updated by this function.
+
+.TP
+.B file
+
+.TP
+.B ap
+The variable arguments list.
+
+.TP
+.B status
+(optional) Set to NULL to not use.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+This returns a string at either the start position (if nothing done or an error occurred) or at the character last processed. The caller is expected to increment past this if they wish to continue processing the string.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP, \fIf_conversion_number_signed_print()\fP, \fIf_conversion_number_unsigned_print()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP, \fIfputc_unlocked()\fP, \fIf_conversion_number_signed_print()\fP, \fIf_conversion_number_unsigned_print()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_string_va.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_string_va.3
new file mode 100644 (file)
index 0000000..cb84965
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fl_print_string_va "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_string_va \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_string_va\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBconst f_file_t   \fP\fIfile\fP,
+    \fBva_list          \fP\fIap\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A formatted print function similar to (but not the same as) the c-library vfprintf() function.
+.PP
+This is identical to fl_print_format() except it accepts a va_list as a variable instead of as "...".
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_eos (with error bit) on EOS reached. F_output (with error bit) on failure to print to the output file. F_parameter (with error bit) if a parameter is invalid. F_valid_not (with error bit) on invalid syntax (such as terminating the string on a single '').
+.PP
+Errors (with error bit) from: f_conversion_number_signed_print(). Errors (with error bit) from: f_conversion_number_unsigned_print(). Errors (with error bit) from: f_print_dynamic(). Errors (with error bit) from: f_print_dynamic_raw(). Errors (with error bit) from: f_print_dynamic_safely(). Errors (with error bit) from: f_print_safely(). Errors (with error bit) from: f_print_terminated().
+.SH PARAMETERS
+.TP
+.B string
+The formatted string to process and output.
+
+.TP
+.B file
+
+.TP
+.B ap
+The variable list. The va_start(ap, string) and va_end(ap) is required to be called outside this function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIfl_print_format()\fP, \fIf_conversion_number_signed_print()\fP, \fIf_conversion_number_unsigned_print()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP, \fIfputc_unlocked()\fP, \fIva_copy()\fP, \fIva_end()\fP, \fIva_start()\fP, \fIf_conversion_number_signed_print()\fP, \fIf_conversion_number_unsigned_print()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_safely()\fP, \fIf_print_terminated()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim.3
new file mode 100644 (file)
index 0000000..259513f
--- /dev/null
@@ -0,0 +1,75 @@
+.TH fl_print_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic.3
new file mode 100644 (file)
index 0000000..b4759dd
--- /dev/null
@@ -0,0 +1,97 @@
+.TH fl_print_trim_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the entire dynamic string, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial.3
new file mode 100644 (file)
index 0000000..2efcc48
--- /dev/null
@@ -0,0 +1,122 @@
+.TH fl_print_trim_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_partial\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..898d80c
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fl_print_trim_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..26edc8a
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fl_print_trim_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..c0ff856
--- /dev/null
@@ -0,0 +1,122 @@
+.TH fl_print_trim_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_raw.3
new file mode 100644 (file)
index 0000000..e5cf00d
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fl_print_trim_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will print the entire dynamic string, except for leading/trailing whitespace.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..b636a2e
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fl_print_trim_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will print the entire dynamic string, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_dynamic_safely.3
new file mode 100644 (file)
index 0000000..e7e74e8
--- /dev/null
@@ -0,0 +1,97 @@
+.TH fl_print_trim_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_dynamic_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the entire dynamic string, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except.3
new file mode 100644 (file)
index 0000000..e39782d
--- /dev/null
@@ -0,0 +1,108 @@
+.TH fl_print_trim_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic.3
new file mode 100644 (file)
index 0000000..f6ebe4e
--- /dev/null
@@ -0,0 +1,123 @@
+.TH fl_print_trim_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial.3
new file mode 100644 (file)
index 0000000..b325cd2
--- /dev/null
@@ -0,0 +1,148 @@
+.TH fl_print_trim_except_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..f4810c2
--- /dev/null
@@ -0,0 +1,150 @@
+.TH fl_print_trim_except_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..7f8d44a
--- /dev/null
@@ -0,0 +1,150 @@
+.TH fl_print_trim_except_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will not print any 1-byte character at a location specified in except array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..1fb48d5
--- /dev/null
@@ -0,0 +1,148 @@
+.TH fl_print_trim_except_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_raw.3
new file mode 100644 (file)
index 0000000..2d4b2d2
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fl_print_trim_except_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..e84da79
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fl_print_trim_except_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_dynamic_safely.3
new file mode 100644 (file)
index 0000000..ad6779b
--- /dev/null
@@ -0,0 +1,123 @@
+.TH fl_print_trim_except_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in.3
new file mode 100644 (file)
index 0000000..445ada0
--- /dev/null
@@ -0,0 +1,132 @@
+.TH fl_print_trim_except_in "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic.3
new file mode 100644 (file)
index 0000000..f5facd2
--- /dev/null
@@ -0,0 +1,147 @@
+.TH fl_print_trim_except_in_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial.3
new file mode 100644 (file)
index 0000000..1846112
--- /dev/null
@@ -0,0 +1,172 @@
+.TH fl_print_trim_except_in_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_complete_not_utf_stop (with error bit) if character is an incomplete UTF-8 fragment at end of the string. F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..baa99c9
--- /dev/null
@@ -0,0 +1,174 @@
+.TH fl_print_trim_except_in_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..4a63034
--- /dev/null
@@ -0,0 +1,174 @@
+.TH fl_print_trim_except_in_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..c37a109
--- /dev/null
@@ -0,0 +1,172 @@
+.TH fl_print_trim_except_in_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a partial dynamic string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array. Will print the only the buffer range specified by range, except for leading/trailing whitespace.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_raw.3
new file mode 100644 (file)
index 0000000..ac4926d
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fl_print_trim_except_in_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..aadcbd7
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fl_print_trim_except_in_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_dynamic_safely.3
new file mode 100644 (file)
index 0000000..941c751
--- /dev/null
@@ -0,0 +1,147 @@
+.TH fl_print_trim_except_in_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a dynamic string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will print the entire dynamic string, except for leading/trailing whitespace. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_raw.3
new file mode 100644 (file)
index 0000000..0e16c71
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fl_print_trim_except_in_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_raw_safely.3
new file mode 100644 (file)
index 0000000..7932482
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fl_print_trim_except_in_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_in_safely.3
new file mode 100644 (file)
index 0000000..2bad616
--- /dev/null
@@ -0,0 +1,132 @@
+.TH fl_print_trim_except_in_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_in_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_in_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array. Will not print any 1-byte character within the ranges specified in except_in array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_raw.3
new file mode 100644 (file)
index 0000000..afd73c3
--- /dev/null
@@ -0,0 +1,110 @@
+.TH fl_print_trim_except_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_raw_safely.3
new file mode 100644 (file)
index 0000000..faa55e1
--- /dev/null
@@ -0,0 +1,110 @@
+.TH fl_print_trim_except_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed). Will not print any 1-byte character at a location specified in except_at array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_except_safely.3
new file mode 100644 (file)
index 0000000..47fa0de
--- /dev/null
@@ -0,0 +1,108 @@
+.TH fl_print_trim_except_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_except_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_except_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_file_t             \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL. Will not print any 1-byte character at a location specified in except_at array.
+.PP
+NULL characters are treated as whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_raw.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_raw.3
new file mode 100644 (file)
index 0000000..735fe86
--- /dev/null
@@ -0,0 +1,77 @@
+.TH fl_print_trim_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_raw\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Except for leading/trailing whitespace, the string is printed as-is without interpretation.
+.PP
+Will not stop at NULL. Will print NULL.
+.PP
+All UTF-8 characters, invalid or not, are printed as is, except for trimmed characters. Invalid UTF-8 characters are not considered whitespace for the purpose of trimming.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_raw_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_raw_safely.3
new file mode 100644 (file)
index 0000000..75e4c16
--- /dev/null
@@ -0,0 +1,77 @@
+.TH fl_print_trim_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_raw_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace (and NULLs).
+.PP
+This is essentually a "safe" print that also prints NULL (except for trimmed NULLs).
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will print NULL (that are not trimmed).
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_print/data/documentation/man/man3/fl_print_trim_safely.3 b/level_1/fl_print/data/documentation/man/man3/fl_print_trim_safely.3
new file mode 100644 (file)
index 0000000..743fb90
--- /dev/null
@@ -0,0 +1,75 @@
+.TH fl_print_trim_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_print_trim_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fl_print_trim_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBconst f_file_t            \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a string, stripping leading and trailing whitespace.
+.PP
+Control characters are converted to the Unicode control character symbols, excluding NULL. UTF-8 sequences with invalid widths are converted to the unknown character '�'.
+.PP
+Will not stop at NULL. Will not print NULL.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_output (with error bit) on error when printing to output. F_parameter (with error bit) if a parameter is invalid. F_utf_not (with error bit) if character is an invalid UTF-8 character.
+.PP
+Errors (with error bit) from: f_utf_is_combining(). Errors (with error bit) from: f_utf_is_valid(). Errors (with error bit) from: f_utf_is_whitespace().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but there is nothing to print. F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfl_print_format\fP(3), \fIfl_print_format_convert\fP(3), \fIfl_print_string_va\fP(3), \fIfl_print_trim\fP(3), \fIfl_print_trim_dynamic\fP(3), \fIfl_print_trim_dynamic_partial\fP(3), \fIfl_print_trim_dynamic_partial_raw\fP(3), \fIfl_print_trim_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_dynamic_partial_safely\fP(3), \fIfl_print_trim_dynamic_raw\fP(3), \fIfl_print_trim_dynamic_raw_safely\fP(3), \fIfl_print_trim_dynamic_safely\fP(3), \fIfl_print_trim_except\fP(3), \fIfl_print_trim_except_dynamic\fP(3), \fIfl_print_trim_except_dynamic_partial\fP(3), \fIfl_print_trim_except_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_dynamic_raw\fP(3), \fIfl_print_trim_except_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_dynamic_safely\fP(3), \fIfl_print_trim_except_in\fP(3), \fIfl_print_trim_except_in_dynamic\fP(3), \fIfl_print_trim_except_in_dynamic_partial\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely\fP(3), \fIfl_print_trim_except_in_raw\fP(3), \fIfl_print_trim_except_in_raw_safely\fP(3), \fIfl_print_trim_except_in_safely\fP(3), \fIfl_print_trim_except_raw\fP(3), \fIfl_print_trim_except_raw_safely\fP(3), \fIfl_print_trim_except_safely\fP(3), \fIfl_print_trim_raw\fP(3), \fIfl_print_trim_raw_safely\fP(3), \fIfl_print_trim_safely\fP(3), \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP, \fIfputc_unlocked()\fP, \fIf_utf_is_combining()\fP, \fIf_utf_is_valid()\fP, \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_status_string/data/documentation/man/man3/fl_status_string_from.3 b/level_1/fl_status_string/data/documentation/man/man3/fl_status_string_from.3
new file mode 100644 (file)
index 0000000..17b18a2
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fl_status_string_from "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_status_string_from \-
+.SH SYNOPSIS
+.nf
+.B #include <status_string.h>
+.sp
+\fBf_status_t fl_status_string_from\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBf_status_t *const       \fP\fIcode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert status codes from their string equivalents to a status code.
+.PP
+Error, warning, and signal flags will not be assigned to the error.
+.PP
+This processes the string until either a match or NULL is reached.
+.PP
+F_data (with error bit) if not found. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_conversion_character_is_decimal().
+.SH PARAMETERS
+.TP
+.B name
+The status name to process.
+
+.TP
+.B code
+The status code a matched string represents.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if string is empty.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus_string.h\fP(3), \fIfl_status_string_from\fP(3), \fIf_conversion_character_is_decimal()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read.3
new file mode 100644 (file)
index 0000000..ca0c00d
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fl_utf_file_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_read \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_read\fP(
+    \fBconst f_file_t                \fP\fIfile\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until EOF is reached.
+.PP
+To check how much was read into the destination, record destination->used before execution and compare to destination->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_complete_not_utf_eof (with error bit) if UTF-8 character was incomplete at the end of the file. F_complete_not_utf_stop (with error bit) if UTF-8 character was incomplete at a stop point (file.size_read). F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read. The file must already be open.
+
+.TP
+.B destination
+The destination the file is being read into. The contents of the file is appended into this destination.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof on success and EOF was reached.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIread()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read_block.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read_block.3
new file mode 100644 (file)
index 0000000..20e5ac8
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fl_utf_file_read_block "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_read_block \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_read_block\fP(
+    \fBconst f_file_t                \fP\fIfile\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until a single block is filled or EOF is reached.
+.PP
+To check how much was read into the destination, record destination->used before execution and compare to destination->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_complete_not_utf_eof (with error bit) if UTF-8 character was incomplete at the end of the file. F_complete_not_utf_stop (with error bit) if UTF-8 character was incomplete at a stop point (file.size_read). F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read. The file must already be open.
+
+.TP
+.B destination
+The destination the file is being read into. The contents of the file is appended into this destination.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof on success and EOF was reached.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIread()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read_until.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_read_until.3
new file mode 100644 (file)
index 0000000..3fc9bd7
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fl_utf_file_read_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_read_until \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_read_until\fP(
+    \fBconst f_file_t                \fP\fIfile\fP,
+    \fBconst f_number_unsigned_t     \fP\fItotal\fP,
+    \fBf_utf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read until a given number or EOF is reached, storing it in the destination.
+.PP
+To check how much was read into the destination, record destination->used before execution and compare to destination->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the read would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_complete_not_utf_eof (with error bit) if UTF-8 character was incomplete at the end of the file. F_complete_not_utf_stop (with error bit) if UTF-8 character was incomplete at a stop point (file.size_read). F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to read. The file must already be open.
+
+.TP
+.B total
+The total bytes to read, unless EOF is reached first.
+
+.TP
+.B destination
+The destination the file is being read into.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eof on success and EOF was reached.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIread()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write.3
new file mode 100644 (file)
index 0000000..442f169
--- /dev/null
@@ -0,0 +1,91 @@
+.TH fl_utf_file_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_write \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_write\fP(
+    \fBconst f_file_t              \fP\fIfile\fP,
+    \fBconst f_utf_string_static_t \fP\fIdestination\fP,
+    \fBf_number_unsigned_t *const  \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until entire destination is written.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open.
+
+.TP
+.B destination
+The destination to write to the file.
+
+.TP
+.B written
+The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success but range.stop exceeded destination.used (only wrote up to destination.used). F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_complete_not_utf_stop if max write was reached but was unable to completely write a given UTF-8 block (incomplete UTF-8 is not written, not even partially).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_block.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_block.3
new file mode 100644 (file)
index 0000000..dde002d
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fl_utf_file_write_block "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_write_block \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_write_block\fP(
+    \fBconst f_file_t              \fP\fIfile\fP,
+    \fBconst f_utf_string_static_t \fP\fIdestination\fP,
+    \fBf_number_unsigned_t *const  \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until a single block is filled or entire destination is written.
+.PP
+To check how much was write into the destination, record destination->used before execution and compare to destination->used after execution.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open.
+
+.TP
+.B destination
+The destination to write to the file.
+
+.TP
+.B written
+The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success but range.stop exceeded destination.used (only wrote up to destination.used). F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_complete_not_utf_stop if max write was reached but was unable to completely write a given UTF-8 block (incomplete UTF-8 is not written, not even partially).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_range.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_range.3
new file mode 100644 (file)
index 0000000..636c429
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fl_utf_file_write_range "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_write_range \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_write_range\fP(
+    \fBconst f_file_t              \fP\fIfile\fP,
+    \fBconst f_utf_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t             \fP\fIrange\fP,
+    \fBf_number_unsigned_t *const  \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a given range within the destination.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open.
+
+.TP
+.B buffer
+The string to write to the file.
+
+.TP
+.B range
+An inclusive start an stop range within the destination to read.
+
+.TP
+.B written
+The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success but range.stop exceeded destination.used (only wrote up to destination.used). F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_complete_not_utf_stop if max write was reached but was unable to completely write a given UTF-8 block (incomplete UTF-8 is not written, not even partially).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_until.3 b/level_1/fl_utf_file/data/documentation/man/man3/fl_utf_file_write_until.3
new file mode 100644 (file)
index 0000000..727922b
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fl_utf_file_write_until "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 1" "Library Functions"
+.SH "NAME"
+fl_utf_file_write_until \-
+.SH SYNOPSIS
+.nf
+.B #include <utf_file.h>
+.sp
+\fBf_status_t fl_utf_file_write_until\fP(
+    \fBconst f_file_t              \fP\fIfile\fP,
+    \fBconst f_utf_string_static_t \fP\fIdestination\fP,
+    \fBconst f_number_unsigned_t   \fP\fItotal\fP,
+    \fBf_number_unsigned_t *const  \fP\fIwritten\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write until a given number or entire destination is written.
+.PP
+F_block (with error bit) if file descriptor is set to non-block and the write would result in a blocking operation. F_buffer (with error bit) if the buffer is invalid. F_file (with error bit) if file descriptor is in an error state. F_file_closed (with error bit) if file is not open. F_file_descriptor_not (with error bit) if the file descriptor is invalid. F_file_type_directory (with error bit) if file descriptor represents a directory. F_input_output (with error bit) on I/O error. F_interrupt (with error bit) if interrupt is received. F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B file
+The file to write to. The file must already be open.
+
+.TP
+.B destination
+The destination to write to the file.
+
+.TP
+.B total
+The total bytes to write, unless end of destination is reached first.
+
+.TP
+.B written
+The total bytes written.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_okay_eos on success but range.stop exceeded destination.used (only wrote up to destination.used). F_okay_stop on success but no data was written (written == 0) (not an error and often happens if file type is not a regular file). F_complete_not_utf_stop if max write was reached but was unable to completely write a given UTF-8 block (incomplete UTF-8 is not written, not even partially).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf_file.h\fP(3), \fIfl_utf_file_read\fP(3), \fIfl_utf_file_read_block\fP(3), \fIfl_utf_file_read_until\fP(3), \fIfl_utf_file_write\fP(3), \fIfl_utf_file_write_block\fP(3), \fIfl_utf_file_write_range\fP(3), \fIfl_utf_file_write_until\fP(3), \fIwrite()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_control_group/data/documentation/man/man3/fll_control_group_prepare.3 b/level_2/fll_control_group/data/documentation/man/man3/fll_control_group_prepare.3
new file mode 100644 (file)
index 0000000..823019c
--- /dev/null
@@ -0,0 +1,60 @@
+.TH fll_control_group_prepare "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_control_group_prepare \-
+.SH SYNOPSIS
+.nf
+.B #include <control_group.h>
+.sp
+\fBf_status_t fll_control_group_prepare\fP(
+    \fBconst f_control_group_t \fP\fIcontrol_group\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Make sure all directories specified in groups exist, creating all directories in the path.
+.PP
+This does not, however, create the control_group.path and will error out if that directory does not exist.
+.PP
+F_directory_not (with error bit) if control_group.path does not exist.
+.PP
+Errors (with error bit) from: f_directory_exists(). Errors (with error bit) from: fl_directory_create().
+.SH PARAMETERS
+.TP
+.B control_group
+The control group(s) to ensure the directories exist.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for associating some process with one or more control groups (cgroups).
+.PP
+groups: An array of control groups, relative to the sysfs path (such as "memory/example").
+.sp
+.RS
+.nf
+\fB
+struct f_control_group_t {
+  uint8_t             \fIas_new\fP;
+  f_string_dynamic_t  \fIpath\fP;
+  f_string_dynamics_t \fIgroups\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontrol_group.h\fP(3), \fIfll_control_group_prepare\fP(3), \fIf_directory_exists()\fP, \fIfl_directory_create()\fP, \fIf_directory_exists()\fP, \fIfl_directory_create()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_error/data/documentation/man/man3/fll_error_file_print.3 b/level_2/fll_error/data/documentation/man/man3/fll_error_file_print.3
new file mode 100644 (file)
index 0000000..32f22c0
--- /dev/null
@@ -0,0 +1,142 @@
+.TH fll_error_file_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_error_file_print \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_error_file_print\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_status_t        \fP\fIstatus\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst uint8_t           \fP\fIflag\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+Designates how printing is to be performed.
+
+.TP
+.B status
+The status code to process. Make sure this has F_status_set_fine() called if the status code has any error or warning bits.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B flag
+One of the fll_error_file_flag_*_e flags. Consider passing fll_error_file_flag_simple_e, on errors like file not find while trying to find file.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true is returned if the status code has no print message. F_false is returned on successful print of known errors.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfll_error_file_print\fP(3), \fIfll_error_parameter_integer_print\fP(3), \fIfll_error_print\fP(3), \fIfll_error_print_debug\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_error/data/documentation/man/man3/fll_error_parameter_integer_print.3 b/level_2/fll_error/data/documentation/man/man3/fll_error_parameter_integer_print.3
new file mode 100644 (file)
index 0000000..762a360
--- /dev/null
@@ -0,0 +1,137 @@
+.TH fll_error_parameter_integer_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_error_parameter_integer_print \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_error_parameter_integer_print\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_status_t        \fP\fIstatus\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst uint8_t           \fP\fIflag\fP,
+    \fBconst f_string_static_t \fP\fIparameter\fP,
+    \fBconst f_string_static_t \fP\fIargument\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print integer related error or warning messages.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+Designates how printing is to be performed.
+
+.TP
+.B status
+The status code to process. Make sure this has F_status_set_fine() called if the status code has any error or warning bits.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B flag
+One of the fll_error_file_flag_*_e flags. Consider passing fll_error_file_flag_simple_e, on errors like file not find while trying to find file.
+
+.TP
+.B parameter
+The name of the parameter.
+
+.TP
+.B argument
+The argument associated with the given parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true is returned if the status code has no print message. F_false is returned on successful print of known errors.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfll_error_file_print\fP(3), \fIfll_error_parameter_integer_print\fP(3), \fIfll_error_print\fP(3), \fIfll_error_print_debug\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_error/data/documentation/man/man3/fll_error_print.3 b/level_2/fll_error/data/documentation/man/man3/fll_error_print.3
new file mode 100644 (file)
index 0000000..4f94b0b
--- /dev/null
@@ -0,0 +1,77 @@
+.TH fll_error_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_error_print \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_error_print\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_status_t  \fP\fIstatus\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP,
+    \fBconst uint8_t     \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error or warning messages.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+Designates how printing is to be performed.
+
+.TP
+.B status
+The status code to process. Make sure this has F_status_set_fine() called if the status code has any error or warning bits.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B flag
+One of the fll_error_file_flag_*_e flags. Consider passing fll_error_file_flag_simple_e, on errors like file not find while trying to find file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_false is returned on successful print of known errors. F_true is returned if the status code is unknown.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfll_error_file_print\fP(3), \fIfll_error_parameter_integer_print\fP(3), \fIfll_error_print\fP(3), \fIfll_error_print_debug\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_error/data/documentation/man/man3/fll_error_print_debug.3 b/level_2/fll_error/data/documentation/man/man3/fll_error_print_debug.3
new file mode 100644 (file)
index 0000000..178169d
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fll_error_print_debug "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_error_print_debug \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_error_print_debug\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error or warning messages.
+.PP
+If debug is NULL, then this prints only the opening color context. This is done to ensure that the opening color context is printed regardless of the state of debug.
+.PP
+Set to NULL to disable.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+Designates how printing is to be performed.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfll_error_file_print\fP(3), \fIfll_error_parameter_integer_print\fP(3), \fIfll_error_print\fP(3), \fIfll_error_print_debug\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add.3 b/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add.3
new file mode 100644 (file)
index 0000000..b46195f
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fll_execute_arguments_add "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_execute_arguments_add \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t fll_execute_arguments_add\fP(
+    \fBconst f_string_static_t    \fP\fIsource\fP,
+    \fBf_string_dynamics_t *const \fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add an argument to the execution arguments array.
+.PP
+This guarantees that a NULL exists at the end of the string (after the source.used length). This does not check for NULL characters anywhere else in the string.
+.PP
+Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_array_increase().
+.SH PARAMETERS
+.TP
+.B source
+The string to add to the arguments array.
+
+.TP
+.B arguments
+The array of string arguments intended to pass to the execute functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIfll_execute_arguments_add\fP(3), \fIfll_execute_arguments_add_parameter\fP(3), \fIfll_execute_arguments_add_parameter_set\fP(3), \fIfll_execute_arguments_add_set\fP(3), \fIfll_execute_into\fP(3), \fIfll_execute_program\fP(3), \fIf_string_dynamic_append()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_parameter.3 b/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_parameter.3
new file mode 100644 (file)
index 0000000..3d6eafa
--- /dev/null
@@ -0,0 +1,133 @@
+.TH fll_execute_arguments_add_parameter "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_execute_arguments_add_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t fll_execute_arguments_add_parameter\fP(
+    \fBconst f_string_static_t    \fP\fIprefix\fP,
+    \fBconst f_string_static_t    \fP\fIname\fP,
+    \fBconst f_string_static_t    \fP\fIvalue\fP,
+    \fBf_string_dynamics_t *const \fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add parameters as arguments to the execution arguments array.
+.PP
+This is intended to simplify adding arguments that have prefixes and values such as those common in console parameters. For example, a pefix of '', a name of 'do', and a value of 'something' would result in two arguments added: 'do' and 'something'.
+.PP
+The arguments are only appended if the length of name and value are not 0.
+.PP
+This guarantees that NULL exists at the end of each argument (after the argumunets[..].used length). This does not check for NULL characters anywhere else in the string.
+.PP
+Errors (with error bit) from: f_string_append(). Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_array_increase().
+.SH PARAMETERS
+.TP
+.B prefix
+The string prepend to the name.
+
+.TP
+.B name
+The string to add to the arguments array.
+
+.TP
+.B value
+The string to add to the arguments array.
+
+.TP
+.B arguments
+The array of string arguments intended to pass to the execute functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIfll_execute_arguments_add\fP(3), \fIfll_execute_arguments_add_parameter\fP(3), \fIfll_execute_arguments_add_parameter_set\fP(3), \fIfll_execute_arguments_add_set\fP(3), \fIfll_execute_into\fP(3), \fIfll_execute_program\fP(3), \fIf_string_append()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase()\fP, \fIf_string_append()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_parameter_set.3 b/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_parameter_set.3
new file mode 100644 (file)
index 0000000..dcdcc3c
--- /dev/null
@@ -0,0 +1,138 @@
+.TH fll_execute_arguments_add_parameter_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_execute_arguments_add_parameter_set \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t fll_execute_arguments_add_parameter_set\fP(
+    \fBconst f_string_static_t    \fP\fIprefix\fP,
+    \fBconst f_string_static_t    \fP\fIname\fP,
+    \fBconst f_string_static_t    \fP\fIvalue\fP,
+    \fBconst f_number_unsigned_t  \fP\fIsize\fP,
+    \fBf_string_dynamics_t *const \fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add set of parameters as arguments to the execution arguments array.
+.PP
+This is intended to simplify adding arguments that have prefixes and values such as those common in console parameters. For example, a pefix of '', a name of 'do', and a value of 'something' would result in two arguments added: 'do' and 'something'.
+.PP
+The arguments are only appended if the length of name and value are not 0.
+.PP
+This guarantees that NULL exists at the end of each argument (after the argumunets[..].used length). This does not check for NULL characters anywhere else in the string.
+.PP
+Errors (with error bit) from: f_string_append(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B prefix
+An array of the strings prepend to the name.
+
+.TP
+.B name
+An array of the strings to add to the arguments array.
+
+.TP
+.B value
+An array of the strings to add to the arguments array.
+
+.TP
+.B size
+The array size of prefix, prefix_length, name, name_length, value, and value_length (all of which must be of the same array size).
+
+.TP
+.B arguments
+The array of string arguments intended to pass to the execute functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIfll_execute_arguments_add\fP(3), \fIfll_execute_arguments_add_parameter\fP(3), \fIfll_execute_arguments_add_parameter_set\fP(3), \fIfll_execute_arguments_add_set\fP(3), \fIfll_execute_into\fP(3), \fIfll_execute_program\fP(3), \fIf_string_append()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP, \fIf_string_append()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_set.3 b/level_2/fll_execute/data/documentation/man/man3/fll_execute_arguments_add_set.3
new file mode 100644 (file)
index 0000000..ceccb06
--- /dev/null
@@ -0,0 +1,74 @@
+.TH fll_execute_arguments_add_set "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_execute_arguments_add_set \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t fll_execute_arguments_add_set\fP(
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_number_unsigned_t \fP\fIsize\fP,
+    \fBf_string_dynamics_t      *\fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add a set of arguments to the execution arguments array.
+.PP
+This guarantees that NULL exists at the end of each argument (after the argumunets[..].used length). This does not check for NULL characters anywhere else in the string.
+.PP
+Errors (with error bit) from: f_string_append(). Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B source
+An array of strings to add to the arguments array.
+
+.TP
+.B size
+The array size of source and length (all of which must be of the same array size).
+
+.TP
+.B arguments
+The array of string arguments intended to pass to the execute functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIfll_execute_arguments_add\fP(3), \fIfll_execute_arguments_add_parameter\fP(3), \fIfll_execute_arguments_add_parameter_set\fP(3), \fIfll_execute_arguments_add_set\fP(3), \fIfll_execute_into\fP(3), \fIfll_execute_program\fP(3), \fIf_string_append()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP, \fIf_string_append()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_execute/data/documentation/man/man3/fll_execute_into.3 b/level_2/fll_execute/data/documentation/man/man3/fll_execute_into.3
new file mode 100644 (file)
index 0000000..23ae21f
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fll_execute_into "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_execute_into \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t fll_execute_into\fP(
+    \fBconst f_string_static_t      \fP\fIprogram\fP,
+    \fBconst f_string_statics_t     \fP\fIarguments\fP,
+    \fBconst uint8_t                \fP\fIoption\fP,
+    \fBconst f_string_maps_t *const \fP\fIenvironment\fP,
+    \fBint *const                   \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute a program given by program name found in the PATH environment (such as "bash") or program path (such as "/bin/bash").
+.PP
+The program will be executed directly and not via a child process.
+.PP
+Because this directly executes a program, it potentially may not return. If and when it does, the executed program is finished executing (be it failure or success). Often times scripts may return and binaries may not.
+.PP
+F_failure (with error bit) on execution failure.
+.PP
+Errors (with error bit) from: f_environment_get(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: fl_environment_path_explode().
+.SH PARAMETERS
+.TP
+.B program
+The name or path of the program. Set to NULL, to designate that arguments[0] is the program name or path.
+
+.TP
+.B arguments
+An array of strings representing the arguments.
+
+.TP
+.B option
+A bitwise set of options, such as: FL_execute_parameter_option_exit_d and FL_execute_parameter_option_path_d. If FL_execute_parameter_option_exit_d: this will call exit() at the end of execution (be it success or failure). If FL_execute_parameter_option_path_d: use the whole program path (such as "/bin/bash" instead "bash" when populating argument[0]. If FL_execute_parameter_option_session_d: will start a new session, setting process group id.
+
+.TP
+.B environment
+(optional) An map of strings representing the environment variable names and their respective values. Completely clears the environment and then creates environment variables for each name and value pair in this map. Set to an empty map (set map used length to 0). Set to NULL to not make any changes to the environment. Be careful, when executing without the full path (such as "bash" rather than "/bin/bash") either set this to NULL or be sure to include the PATH in this map. Be careful, scripts might return and the environment will have changed when this is not NULL. Be careful, if this returns F_failure, the environment will have changed when this is not NULL.
+
+.TP
+.B result
+The code returned after finishing execution of program.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIfll_execute_arguments_add\fP(3), \fIfll_execute_arguments_add_parameter\fP(3), \fIfll_execute_arguments_add_parameter_set\fP(3), \fIfll_execute_arguments_add_set\fP(3), \fIfll_execute_into\fP(3), \fIfll_execute_program\fP(3), \fIf_environment_get()\fP, \fIf_string_dynamic_append()\fP, \fIfl_environment_path_explode()\fP, \fIexecv()\fP, \fIexecvp()\fP, \fIexit()\fP, \fImemcpy()\fP, \fIstrnlen()\fP, \fIf_environment_get()\fP, \fIf_string_dynamic_append()\fP, \fIfl_environment_path_explode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_execute/data/documentation/man/man3/fll_execute_program.3 b/level_2/fll_execute/data/documentation/man/man3/fll_execute_program.3
new file mode 100644 (file)
index 0000000..eb9411d
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_execute_program "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_execute_program \-
+.SH SYNOPSIS
+.nf
+.B #include <execute.h>
+.sp
+\fBf_status_t fll_execute_program\fP(
+    \fBconst f_string_static_t       \fP\fIprogram\fP,
+    \fBconst f_string_statics_t      \fP\fIarguments\fP,
+    \fBfl_execute_parameter_t *const \fP\fIparameter\fP,
+    \fBfl_execute_as_t *const        \fP\fIas\fP,
+    \fBvoid *const                   \fP\fIresult\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute a program given by program name found in the PATH environment (such as "bash") or program path (such as "/bin/bash").
+.PP
+The program will be executed via a forked child process.
+.PP
+When the path has a slash "/" or the environment is to be cleared, then this does validate the path to the program. Otherwise, this does not validate the path to the program.
+.PP
+When the parameter.option has the FL_execute_parameter_option_exit_d bit set, then this calls exit() when the child process returns. Otherwise, this returns F_child and assigns the child's return code to result for the child process. The caller is expected to handle the appropriate exit procedures and memory deallocation for the child process when F_child is returned.
+.PP
+This returns F_capability, F_group, and F_user only by the child process and must be treated the same as F_child for the purposes of understanding what the current process is. These are essentialy F_child with explicit error codes that are returned instead of performing the desired execution.
+.PP
+This returns F_control_group, F_limit, F_processor, and F_schedule only by the parent process and represents that the child process could not be executed.
+.PP
+Set to NULL to not use.
+.PP
+F_capability (with error bit) on failure to set capabilities in the child (only the child process returns this). F_control_group (with error bit) on failure to set control group in the child (only the parent process returns this). F_child (with error bit) on any failure without an explicit failure code (like F_group) before calling execute but this is the child thread. F_failure (with error bit) on execution failure. F_fork (with error bit) on fork failure. F_group (with error bit) on failure to set GID in the child (only the child process returns this). F_limit (with error bit) on failure to set a resource limit in the child (only the parent process returns this). F_nice (with error bit) on failure to set process niceness in the child (only the child process returns this). F_pipe (with error bit) on pipe failure. F_processor (with error bit) on failure to set a processor (cpu) affinity in the child (only the parent process returns this). F_schedule (with error bit) on failure to set scheduler in the child (only the parent process returns this). F_user (with error bit) on failure to set UID in the child (only the child process returns this).
+.PP
+Errors (with error bit) from: f_capability_process_set(). Errors (with error bit) from: f_environment_get(). Errors (with error bit) from: f_file_exists(). Errors (with error bit) from: f_limit_process(). Errors (with error bit) from: f_signal_mask(). Errors (with error bit) from: f_string_append(). Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_thread_signal_mask(). Errors (with error bit) from: fl_environment_path_explode().
+.SH PARAMETERS
+.TP
+.B program
+The name or path of the program. Set to NULL, to designate that arguments[0] is the program name or path.
+
+.TP
+.B arguments
+An array of strings representing the arguments.
+
+.TP
+.B parameter
+(optional) This and most of its fields are optional and are disabled when set to 0. option: A bitwise set of options, such as: FL_execute_parameter_option_exit_d and FL_execute_parameter_option_path_d. environment: An map of strings representing the environment variable names and their respective values. Completely clears the environment and then creates environment variables for each name and value pair in this map. Set to an empty map (set map used length to 0). Set to NULL to not make any changes to the environment. values: An array of strings representing the environment variable names. The values.used must be of at least names.used. Set individual strings.used to 0 for empty/null values. signals: A pointer to the set of signals to have the child process block or not block. When not specified, the child process uses the signal blocking behavior of the parent process. data: A pointer to a string to pipe as standard input to the child process. The parent will block until the standard input is fully read or the child process exits.
+
+.TP
+.B as
+(optional) This and most of its fields are optional and are disabled when set to NULL.
+
+.TP
+.B result
+(optional) The execute status code returned after finishing or attempting to finish execution of program. When FL_execute_parameter_option_return_d is passed via parameter.option, then this instead stores the child process id (PID). This is should be of (int *) except when FL_execute_parameter_option_return_d this should instead be (pid_t *).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for containing additional parameters for the execute functions that call the execv() family of functions.
+.PP
+data: The data to pipe to the child process, set to 0 to not use.
+.sp
+.RS
+.nf
+\fB
+struct fl_execute_parameter_t {
+  uint8_t                   \fIoption\fP;
+  int                       \fIwait\fP;
+  const f_string_maps_t    *\fIenvironment\fP;
+  const f_signal_how_t     *\fIsignals\fP;
+  const f_string_static_t  *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for containing identity and access related parameters for the execute functions that call the execv() family of functions.
+.PP
+There are likely many more identity and access related things that can be done but this focuses on a small core set of those.
+.PP
+Control Groups, or cgroups, exist here as a full file path in which the PID of a child process is to be written to. This may change as more is learned about using cgroups, but it is not known if there are any functions available like set_cgroup(..).
+.PP
+scheduler: The scheduler to assign the child process to, set to 0 to not use.
+.sp
+.RS
+.nf
+\fB
+struct fl_execute_as_t {
+  int                    *\fInice\fP;
+  f_uid_t                *\fIid_user\fP;
+  f_gid_t                *\fIid_group\fP;
+  f_int32s_t             *\fIaffinity\fP;
+  f_capability_t          \fIcapability\fP;
+  f_control_group_t      *\fIcontrol_group\fP;
+  f_int32s_t             *\fIid_groups\fP;
+  f_limit_sets_t         *\fIlimits\fP;
+  f_execute_scheduler_t  *\fIscheduler\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_child on success and this is the child thread. F_parent on success and this is the parent thread (only happens when FL_execute_parameter_option_return_d is passed).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIexecute.h\fP(3), \fIfll_execute_arguments_add\fP(3), \fIfll_execute_arguments_add_parameter\fP(3), \fIfll_execute_arguments_add_parameter_set\fP(3), \fIfll_execute_arguments_add_set\fP(3), \fIfll_execute_into\fP(3), \fIfll_execute_program\fP(3), \fIf_capability_process_set()\fP, \fIf_environment_get()\fP, \fIf_file_exists()\fP, \fIf_limit_process()\fP, \fIf_signal_mask()\fP, \fIf_string_append()\fP, \fIf_memory_array_resize()\fP, \fIf_thread_signal_mask()\fP, \fIfl_environment_path_explode()\fP, \fIclose()\fP, \fIclearenv()\fP, \fIdup2()\fP, \fIexecv()\fP, \fIexecvp()\fP, \fIexit()\fP, \fIfork()\fP, \fIgetpid()\fP, \fImemcpy()\fP, \fInice()\fP, \fIpipe()\fP, \fIsetsid()\fP, \fIsched_setaffinity()\fP, \fIsched_setscheduler()\fP, \fIsetgid()\fP, \fIsetgroups()\fP, \fIsetuid()\fP, \fIstrnlen()\fP, \fIwaitpid()\fP, \fIf_capability_process_set()\fP, \fIf_environment_get()\fP, \fIf_file_exists()\fP, \fIf_limit_process()\fP, \fIf_signal_mask()\fP, \fIf_string_dynamic_append()\fP, \fIf_memory_array_resize()\fP, \fIf_thread_signal_mask()\fP, \fIfl_control_group_apply()\fP, \fIfl_environment_path_explode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_file/data/documentation/man/man3/fll_file_mode_set_all.3 b/level_2/fll_file/data/documentation/man/man3/fll_file_mode_set_all.3
new file mode 100644 (file)
index 0000000..67bccd1
--- /dev/null
@@ -0,0 +1,83 @@
+.TH fll_file_mode_set_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_file_mode_set_all \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t fll_file_mode_set_all\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBconst uint8_t             \fP\fIdereference\fP,
+    \fBconst mode_t              \fP\fImode\fP,
+    \fBconst f_number_unsigned_t \fP\fIdepth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change mode of a given file or directory at the specified path.
+.PP
+This does not set mode based on umask(), be sure to apply umask if so desired. (such as: mode & ~mask).
+.PP
+If the file is a directory then recurse into that directory and apply mode to all files within.
+.PP
+F_access_denied (with error bit) on access denied. F_access_mode (with error bit) if the current user does not have access to assign the file mode. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_file_mode_set(). Errors (with error bit) from: f_directory_exists(). Errors (with error bit) from: fl_directory_list().
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B mode
+The new mode to use.
+
+.TP
+.B depth_max
+The max recursion depth.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if path.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIfll_file_mode_set_all\fP(3), \fIfll_file_role_change_all\fP(3), \fIf_file_mode_set()\fP, \fIf_directory_exists()\fP, \fIfl_directory_list()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_file/data/documentation/man/man3/fll_file_role_change_all.3 b/level_2/fll_file/data/documentation/man/man3/fll_file_role_change_all.3
new file mode 100644 (file)
index 0000000..1c0bf62
--- /dev/null
@@ -0,0 +1,88 @@
+.TH fll_file_role_change_all "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_file_role_change_all \-
+.SH SYNOPSIS
+.nf
+.B #include <file.h>
+.sp
+\fBf_status_t fll_file_role_change_all\fP(
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBconst f_uid_t             \fP\fIuid\fP,
+    \fBconst f_gid_t             \fP\fIgid\fP,
+    \fBconst uint8_t             \fP\fIdereference\fP,
+    \fBconst f_number_unsigned_t \fP\fIdepth_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Change owner and/or group of a given file at the specified path.
+.PP
+At least one of uid or gid must not be -1.
+.PP
+If the file is a directory then recurse into that directory and apply mode to all files within.
+.PP
+F_access_denied (with error bit) on access denied. F_access_group (with error bit) if the current user does not have access to assign the specified group. F_access_owner (with error bit) if the current user does not have access to assign the specified owner. F_buffer (with error bit) if the buffer is invalid. F_directory_not (with error bit) on invalid directory. F_file_found_not (with error bit) if file at path was not found. F_input_output (with error bit) on I/O error. F_loop (with error bit) on loop error. F_memory_not (with error bit) if out of memory. F_name (with error bit) on path name error. F_parameter (with error bit) if a parameter is invalid. F_read_only (with error bit) if file is read-only. F_failure (with error bit) on any other error.
+.PP
+Errors (with error bit) from: f_directory_is(). Errors (with error bit) from: f_file_role_change(). Errors (with error bit) from: fl_directory_list().
+.SH PARAMETERS
+.TP
+.B path
+The path file name.
+
+.TP
+.B uid
+The new user id to use. Set to -1 to not change.
+
+.TP
+.B gid
+The new group id to use. Set to -1 to not change.
+
+.TP
+.B dereference
+Set to TRUE to dereference symlinks (often is what is desired). Set to FALSE to operate on the symlink itself.
+
+.TP
+.B depth_max
+The max recursion depth.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfile.h\fP(3), \fIfll_file_mode_set_all\fP(3), \fIfll_file_role_change_all\fP(3), \fIf_directory_is()\fP, \fIf_file_role_change()\fP, \fIfl_directory_list()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_list_read.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_list_read.3
new file mode 100644 (file)
index 0000000..e14a941
--- /dev/null
@@ -0,0 +1,219 @@
+.TH fll_fss_basic_list_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_basic_list_read \-
+.SH SYNOPSIS
+.nf
+.B #include <basic_list.h>
+.sp
+\fBvoid fll_fss_basic_list_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIobjects\fP,
+    \fBf_rangess_t *const          \fP\fIcontents\fP,
+    \fBf_number_unsigneds_t *const \fP\fIobjects_delimits\fP,
+    \fBf_number_unsigneds_t *const \fP\fIcontents_delimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a buffer expected to be in fss-0002 format, getting all objects and their respective content.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_number_overflow (with error bit) if the maximum buffer size is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_basic_list_content_read(). Errors (with error bit) from: fl_fss_basic_list_object_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The range within the buffer that is currently being read.
+
+.TP
+.B objects
+This will be populated with all valid objects found.
+
+.TP
+.B contents
+This will be populated with all valid contents found.
+
+.TP
+.B objects_delimits
+An array of delimits for objects detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B contents_delimits
+(optional) An array of delimits for contents detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid content. This only stores comments found within valid content only.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic_list.h\fP(3), \fIfll_fss_basic_list_read\fP(3), \fIfll_fss_basic_list_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_read()\fP, \fIfl_fss_basic_list_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_read()\fP, \fIfl_fss_basic_list_object_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_list_write.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_list_write.3
new file mode 100644 (file)
index 0000000..925c359
--- /dev/null
@@ -0,0 +1,135 @@
+.TH fll_fss_basic_list_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_basic_list_write \-
+.SH SYNOPSIS
+.nf
+.B #include <basic_list.h>
+.sp
+\fBvoid fll_fss_basic_list_write\fP(
+    \fBconst f_string_static_t        \fP\fIobject\fP,
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst f_string_static_t *const \fP\fIcontent_prepend\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a single object string and content string to a buffer, using fss-0002 format.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if object or contents are empty (either object.used or contents.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_basic_list_content_write(). Errors (with error bit) from: fl_fss_basic_list_object_write().
+.SH PARAMETERS
+.TP
+.B object
+A string representing the object.
+
+.TP
+.B content
+A string representing the content.
+
+.TP
+.B content_prepend
+(optional) A string to prepend at the start of each line in content, such as spaces.
+
+.TP
+.B destination
+The buffer to write to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic_list.h\fP(3), \fIfll_fss_basic_list_read\fP(3), \fIfll_fss_basic_list_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_write()\fP, \fIfl_fss_basic_list_object_write()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_write()\fP, \fIfl_fss_basic_list_object_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_read.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_read.3
new file mode 100644 (file)
index 0000000..aec7c24
--- /dev/null
@@ -0,0 +1,221 @@
+.TH fll_fss_basic_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_basic_read \-
+.SH SYNOPSIS
+.nf
+.B #include <basic.h>
+.sp
+\fBvoid fll_fss_basic_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIobjects\fP,
+    \fBf_rangess_t *const          \fP\fIcontents\fP,
+    \fBf_uint8s_t *const           \fP\fIobjects_quoted\fP,
+    \fBf_number_unsigneds_t *const \fP\fIobjects_delimits\fP,
+    \fBf_number_unsigneds_t *const \fP\fIcontents_delimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a buffer expected to be in fss-0000 format, getting all objects and their respective content.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if buffer is empty (buffer.used is 0). F_data_not_eol if there is no data to write and EOL was reached. F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_number_overflow (with error bit) if the maximum buffer size is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_basic_content_read(). Errors (with error bit) from: fl_fss_basic_object_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The range within the buffer that is currently being read.
+
+.TP
+.B objects
+This will be populated with all valid objects found.
+
+.TP
+.B contents
+This will be populated with all valid contents found.
+
+.TP
+.B objects_quoted
+(optional) An array mapped to each object in objects representing the quote type discovered (from the f_fss_quote_type_*_e), if any.
+
+.TP
+.B objects_delimits
+An array of delimits for objects detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B contents_delimits
+(optional) An array of delimits for contents detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint8_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint8s_t {
+  uint8_t            *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic.h\fP(3), \fIfll_fss_basic_read\fP(3), \fIfll_fss_basic_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_basic_content_read()\fP, \fIfl_fss_basic_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_content_read()\fP, \fIfl_fss_basic_object_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_write.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_basic_write.3
new file mode 100644 (file)
index 0000000..89be381
--- /dev/null
@@ -0,0 +1,110 @@
+.TH fll_fss_basic_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_basic_write \-
+.SH SYNOPSIS
+.nf
+.B #include <basic.h>
+.sp
+\fBvoid fll_fss_basic_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst uint8_t             \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a single object string and content string to a buffer, using fss-0000 format.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if object or contents are empty (either object.used or contents.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_basic_content_write(). Errors (with error bit) from: fl_fss_basic_object_write().
+.SH PARAMETERS
+.TP
+.B object
+A string representing the object.
+
+.TP
+.B content
+A string representing the content.
+
+.TP
+.B quote
+If 0, then double quotes are auto-inserted, when required. Otherwise, this is quote character to wrap the object in when writing.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbasic.h\fP(3), \fIfll_fss_basic_read\fP(3), \fIfll_fss_basic_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_basic_content_write()\fP, \fIfl_fss_basic_object_write()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_content_write()\fP, \fIfl_fss_basic_object_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_embedded_list_read.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_embedded_list_read.3
new file mode 100644 (file)
index 0000000..3d8aa82
--- /dev/null
@@ -0,0 +1,199 @@
+.TH fll_fss_embedded_list_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_embedded_list_read \-
+.SH SYNOPSIS
+.nf
+.B #include <embedded_list.h>
+.sp
+\fBvoid fll_fss_embedded_list_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_fss_nest_t *const         \fP\fInest\fP,
+    \fBf_number_unsigneds_t *const \fP\fIobjects_delimits\fP,
+    \fBf_number_unsigneds_t *const \fP\fIcontents_delimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a buffer expected to be in fss-0008 format, getting all objects and their respective content.
+.PP
+The state.data must be of type fl_fss_data_embedded_list_t with all properties as valid.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success (both valid object and valid content found with start location is at end of content). F_okay_eos on success after reaching the end of the buffer (both valid object and valid content found with start location is at end of buffer). F_okay_stop on success after reaching stopping point (both valid object and valid content found with start location is at stop point). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eol if there is no data to write and EOL was reached. F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_fss_found_object_content_not on success and object was found but no content was found (start location is at end of object).
+.PP
+F_number_overflow (with error bit) if the maximum buffer size is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_embedded_list_content_read(). Errors (with error bit) from: fl_fss_embedded_list_object_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The range within the buffer that is currently being read.
+
+.TP
+.B nest
+An nested set of all objects and content.
+
+.TP
+.B objects_delimits
+An array of delimits for objects detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B contents_delimits
+(optional) An array of delimits for contents detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid content. This only stores comments found within valid content only.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_fss_items_t.
+.PP
+Each array row represents the nesting depth. The top-level will not have any parent, so "parent" must be ignored on anything at index 0. The parent identifier is expected to reference a position in the nesting depth immediately above it.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_nest_t {
+  f_fss_items_t      *\fIdepth\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIembedded_list.h\fP(3), \fIfll_fss_embedded_list_read\fP(3), \fIfll_fss_embedded_list_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_embedded_list_content_read()\fP, \fIfl_fss_embedded_list_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_embedded_list_content_read()\fP, \fIfl_fss_embedded_list_object_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_embedded_list_write.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_embedded_list_write.3
new file mode 100644 (file)
index 0000000..0c065d4
--- /dev/null
@@ -0,0 +1,159 @@
+.TH fll_fss_embedded_list_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_embedded_list_write \-
+.SH SYNOPSIS
+.nf
+.B #include <embedded_list.h>
+.sp
+\fBvoid fll_fss_embedded_list_write\fP(
+    \fBconst f_string_static_t        \fP\fIobject\fP,
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst f_string_static_t *const \fP\fIcontent_prepend\fP,
+    \fBconst f_ranges_t *const        \fP\fIignore\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a single object string and content string to a buffer, using fss-0008 format.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if object or contents are empty (either object.used or contents.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_embedded_list_content_write(). Errors (with error bit) from: fl_fss_embedded_list_object_write().
+.SH PARAMETERS
+.TP
+.B object
+A string representing the object.
+
+.TP
+.B content
+A string representing the content.
+
+.TP
+.B content_prepend
+(optional) A string to prepend at the start of each line in content, such as spaces.
+
+.TP
+.B ignore
+(optional) A list of ranges within the string to ignore. These ranges are only checked/ignored if there is a valid nested object open or a valid nested object close. Any valid nested object open or valid nested object close inside an ingore range will not be escaped.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIembedded_list.h\fP(3), \fIfll_fss_embedded_list_read\fP(3), \fIfll_fss_embedded_list_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_embedded_list_content_write()\fP, \fIfl_fss_embedded_list_object_write()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_embedded_list_content_write()\fP, \fIfl_fss_embedded_list_object_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_list_read.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_list_read.3
new file mode 100644 (file)
index 0000000..bfcc357
--- /dev/null
@@ -0,0 +1,245 @@
+.TH fll_fss_extended_list_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_extended_list_read \-
+.SH SYNOPSIS
+.nf
+.B #include <extended_list.h>
+.sp
+\fBvoid fll_fss_extended_list_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIobjects\fP,
+    \fBf_ranges_t *const           \fP\fIcloses\fP,
+    \fBf_rangess_t *const          \fP\fIcontents\fP,
+    \fBf_number_unsigneds_t *const \fP\fIobjects_delimits\fP,
+    \fBf_number_unsigneds_t *const \fP\fIcontents_delimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a buffer expected to be in fss-0003 format, getting all objects and their respective content.
+.PP
+This does not utilize recursion and has a max content depth of 1, see fss-0008 (Embedded List) for that purpose.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success (both valid object and valid content found with start location is at end of content). F_okay_eos on success after reaching the end of the buffer (both valid object and valid content found with start location is at end of buffer). F_okay_stop on success after reaching stopping point (both valid object and valid content found with start location is at stop point). F_data_not if buffer is empty (buffer.used is 0). F_data_not_eol if there is no data to write and EOL was reached. F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location. F_fss_found_object_content_not on success and object was found but no content was found (start location is at end of object).
+.PP
+F_number_overflow (with error bit) if the maximum buffer size is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_extended_list_content_read(). Errors (with error bit) from: fl_fss_extended_list_object_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The range within the buffer that is currently being read.
+
+.TP
+.B objects
+This will be populated with all valid objects found.
+
+.TP
+.B closes
+This will be populated with all close location of found Objects.
+
+.TP
+.B contents
+This will be populated with all valid contents found.
+
+.TP
+.B objects_delimits
+An array of delimits for objects detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B contents_delimits
+(optional) An array of delimits for contents detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid content. This only stores comments found within valid content only.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended_list.h\fP(3), \fIfll_fss_extended_list_read\fP(3), \fIfll_fss_extended_list_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_extended_list_content_read()\fP, \fIfl_fss_extended_list_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_extended_list_content_read()\fP, \fIfl_fss_extended_list_object_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_list_write.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_list_write.3
new file mode 100644 (file)
index 0000000..99ed36c
--- /dev/null
@@ -0,0 +1,159 @@
+.TH fll_fss_extended_list_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_extended_list_write \-
+.SH SYNOPSIS
+.nf
+.B #include <extended_list.h>
+.sp
+\fBvoid fll_fss_extended_list_write\fP(
+    \fBconst f_string_static_t        \fP\fIobject\fP,
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst f_string_static_t *const \fP\fIcontent_prepend\fP,
+    \fBconst f_ranges_t *const        \fP\fIignore\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a single object string and content string to a buffer, using fss-0003 format.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if object or contents are empty (either object.used or contents.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_extended_list_content_write(). Errors (with error bit) from: fl_fss_extended_list_object_write().
+.SH PARAMETERS
+.TP
+.B object
+A string representing the object.
+
+.TP
+.B content
+A string representing the content.
+
+.TP
+.B content_prepend
+(optional) A string to prepend at the start of each line in content, such as spaces.
+
+.TP
+.B ignore
+(optional) A list of ranges within the string to ignore. These ranges are only checked/ignored if there is a valid nested object open or a valid nested object close. Any valid nested object open or valid nested object close inside an ingore range will not be escaped.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended_list.h\fP(3), \fIfll_fss_extended_list_read\fP(3), \fIfll_fss_extended_list_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_extended_list_content_write()\fP, \fIfl_fss_extended_list_object_write()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_extended_list_content_write()\fP, \fIfl_fss_extended_list_object_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_read.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_read.3
new file mode 100644 (file)
index 0000000..b5e3be1
--- /dev/null
@@ -0,0 +1,247 @@
+.TH fll_fss_extended_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_extended_read \-
+.SH SYNOPSIS
+.nf
+.B #include <extended.h>
+.sp
+\fBvoid fll_fss_extended_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIobjects\fP,
+    \fBf_rangess_t *const          \fP\fIcontents\fP,
+    \fBf_uint8s_t *const           \fP\fIobjects_quoted\fP,
+    \fBf_uint8ss_t *const          \fP\fIcontents_quoted\fP,
+    \fBf_number_unsigneds_t *const \fP\fIobjects_delimits\fP,
+    \fBf_number_unsigneds_t *const \fP\fIcontents_delimits\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a buffer expected to be in fss-0001 format, getting all objects and their respective content.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_stop on success after reaching stopping point. F_okay_eos on success after reaching the end of the buffer. F_data_not if buffer is empty (buffer.used is 0). F_data_not_stop no data to write due start location being greater than stop location. F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_eol if there is no data to write and EOL was reached.
+.PP
+F_number_overflow (with error bit) if the maximum buffer size is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_extended_content_read(). Errors (with error bit) from: fl_fss_extended_object_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The range within the buffer that is currently being read.
+
+.TP
+.B objects
+This will be populated with all valid objects found.
+
+.TP
+.B contents
+This will be populated with all valid contents found.
+
+.TP
+.B objects_quoted
+(optional) An array mapped to each object in objects representing the quote type discovered (from the f_fss_quote_type_*_e), if any.
+
+.TP
+.B contents_quoted
+(optional) An array mapped to each content in objects representing the quote type discovered (from the f_fss_quote_type_*_e), if any.
+
+.TP
+.B objects_delimits
+An array of delimits for objects detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B contents_delimits
+(optional) An array of delimits for contents detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint8_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint8s_t {
+  uint8_t            *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of an array of array uint8_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint8ss_t {
+  f_uint8s_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended.h\fP(3), \fIfll_fss_extended_read\fP(3), \fIfll_fss_extended_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_extended_content_read()\fP, \fIfl_fss_extended_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_extended_content_read()\fP, \fIfl_fss_extended_object_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_write.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_extended_write.3
new file mode 100644 (file)
index 0000000..11e6593
--- /dev/null
@@ -0,0 +1,104 @@
+.TH fll_fss_extended_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_extended_write \-
+.SH SYNOPSIS
+.nf
+.B #include <extended.h>
+.sp
+\fBvoid fll_fss_extended_write\fP(
+    \fBconst f_string_static_t   \fP\fIobject\fP,
+    \fBconst f_string_statics_t  \fP\fIcontents\fP,
+    \fBconst uint8_t             \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a single object string and content string to a buffer, using fss-0001 format.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if object or contents are empty (either object.used or contents.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_extended_content_write(). Errors (with error bit) from: fl_fss_extended_object_write().
+.SH PARAMETERS
+.TP
+.B object
+A string representing the object.
+
+.TP
+.B contents
+An array of strings representing multiple content to write.
+
+.TP
+.B quote
+If 0, then double quotes are auto-inserted, when required. Otherwise, this is quote character to wrap the object in when writing.
+
+.TP
+.B destination
+The buffer where the content is written to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIextended.h\fP(3), \fIfll_fss_extended_read\fP(3), \fIfll_fss_extended_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_extended_content_write()\fP, \fIfl_fss_extended_object_write()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_extended_content_write()\fP, \fIfl_fss_extended_object_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_identify.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_identify.3
new file mode 100644 (file)
index 0000000..bb53c0d
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_fss_identify "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_identify \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_identify\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_range_t *const        \fP\fIrange\fP,
+    \fBf_fll_ids_t *const      \fP\fIids\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Identify FSS type from a buffered string.
+.PP
+The operates on the assumption that the first character provided is the start of the line. This will process until the stop point or the end of the line. This stop point should always be after the end of the line, except when there is an error.
+.PP
+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.
+.PP
+See the f_parse_dynamic_partial_fll_identify() function for details on individual FLL/FSS Identifier processing.
+.PP
+Set to NULL to not use.
+.PP
+When non-NULL, this will have its length reset to 0. FLL/FSS Identifiers will then be appended to this array.
+.PP
+F_complete_not_utf (with error bit) if character is an incomplete UTF-8 fragment.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_utf_is_whitespace(). Errors (with error bit) from: f_parse_dynamic_partial_fll_identify().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to process.
+
+.TP
+.B 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.
+
+.TP
+.B ids
+(optional) The FLL Identifiers to populate with results of this function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of f_fll_id_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_fll_ids_t {
+  f_fll_id_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_data_not if length is 0. F_found if the buffer does represent a valid FSS Identifier. F_found_not if the buffer does not represent a valid FSS Identifier. F_maybe if the buffer is a valid FLL Identifier but does not have an FSS Identifier ("fss-XXXX").
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_parse_dynamic_partial_fll_identify()\fP, \fIf_memory_array_increase()\fP, \fIf_utf_is_whitespace()\fP, \fIf_parse_dynamic_partial_fll_identify()\fP, \fIf_memory_array_increase()\fP, \fIf_utf_is_whitespace()\fP, \fIf_parse_dynamic_partial_fll_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_payload_read.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_payload_read.3
new file mode 100644 (file)
index 0000000..9821afc
--- /dev/null
@@ -0,0 +1,227 @@
+.TH fll_fss_payload_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_payload_read \-
+.SH SYNOPSIS
+.nf
+.B #include <payload.h>
+.sp
+\fBvoid fll_fss_payload_read\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBf_range_t *const            \fP\fIrange\fP,
+    \fBf_ranges_t *const           \fP\fIobjects\fP,
+    \fBf_rangess_t *const          \fP\fIcontents\fP,
+    \fBf_number_unsigneds_t *const \fP\fIobjects_delimits\fP,
+    \fBf_number_unsigneds_t *const \fP\fIcontents_delimits\fP,
+    \fBf_ranges_t *const           \fP\fIcomments\fP,
+    \fBf_state_t *const            \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Read a buffer expected to be in fss-000e format, getting all objects and their respective content.
+.PP
+This processes only the outermost part and specially handles the payload. The inner data, such as the fss-0001 inside of the "header", should be directly processed via the appropriate function.
+.PP
+The "payload" Object is required and if it is not found, this function returns with the error flag set.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if buffer is empty (buffer.used is 0). F_data_not_eos no data to read due start location being greater than or equal to buffer size. F_data_not_stop no data to read due start location being greater than stop location.
+.PP
+F_fss_found_object_content_not (with error bit) When payload Content is missing. F_okay (with error bit) on success, except that no "payload" is found. F_okay_eos (with error bit) on success, but no "payload" is found and start location is now greater than or equal to buffer size. F_okay_stop (with error bit) on success, but no "payload" is found and start location is now greater than stop location. F_number_overflow (with error bit) if the maximum buffer size is reached. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: fl_fss_basic_list_content_read(). Errors (with error bit) from: fl_fss_basic_list_object_read().
+.PP
+F_number_overflow (with error bit) if the maximum buffer size is reached.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_basic_list_content_read(). Errors (with error bit) from: fl_fss_basic_list_object_read().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B range
+The range within the buffer that is currently being read.
+
+.TP
+.B objects
+This will be populated with all valid objects found.
+
+.TP
+.B contents
+This will be populated with all valid contents found.
+
+.TP
+.B objects_delimits
+An array of delimits for objects detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B contents_delimits
+(optional) An array of delimits for contents detected during processing. The caller is expected to decide if and when to process them.
+
+.TP
+.B comments
+An array of ranges representing where comments are found within any valid content. This only stores comments found within valid content only.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpayload.h\fP(3), \fIfll_fss_payload_read\fP(3), \fIfll_fss_payload_write\fP(3), \fIfl_fss_basic_list_content_read()\fP, \fIfl_fss_basic_list_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_read()\fP, \fIfl_fss_basic_list_object_read()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_read()\fP, \fIfl_fss_basic_list_object_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_payload_write.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_payload_write.3
new file mode 100644 (file)
index 0000000..08cce9d
--- /dev/null
@@ -0,0 +1,144 @@
+.TH fll_fss_payload_write "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_payload_write \-
+.SH SYNOPSIS
+.nf
+.B #include <payload.h>
+.sp
+\fBvoid fll_fss_payload_write\fP(
+    \fBconst f_string_static_t        \fP\fIobject\fP,
+    \fBconst f_string_static_t        \fP\fIcontent\fP,
+    \fBconst uint8_t                  \fP\fItrim\fP,
+    \fBconst f_string_static_t *const \fP\fIcontent_prepend\fP,
+    \fBf_string_dynamic_t *const      \fP\fIdestination\fP,
+    \fBf_state_t *const               \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Write a single object string and content string to a buffer, using fss-0002 format.
+.PP
+This processes only the outermost part and specially handles the payload. The inner data, such as the fss-0001 inside of the "header", should be directly processed via the appropriate function.
+.PP
+If the Object is "payload", then the Content is written directly without prcessing or escaping.
+.PP
+When state.interrupt() returns, only F_interrupt and F_interrupt_not are processed. Error bit designates an error but must be passed along with F_interrupt. All other statuses are ignored.
+.PP
+This alters state.status: F_okay on success. F_okay_eos on success after reaching the end of the buffer. F_okay_stop on success after reaching stopping point. F_data_not if object or contents are empty (either object.used or contents.used is 0). F_data_not_eos no data to write due start location being greater than or equal to buffer size. F_data_not_stop no data to write due start location being greater than stop location.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: fl_fss_basic_list_content_write(). Errors (with error bit) from: fl_fss_basic_list_object_write().
+.SH PARAMETERS
+.TP
+.B object
+A string representing the object.
+
+.TP
+.B content
+A string representing the content.
+
+.TP
+.B trim
+If TRUE, the Object is passed f_fss_complete_full_trim_e. If FALSE, the Object is passed f_fss_complete_full_e. The Content is always passed f_fss_complete_full_e.
+
+.TP
+.B content_prepend
+(optional) A string to prepend at the start of each line in content, such as spaces. This will not be prepended for the Object "payload".
+
+.TP
+.B destination
+The buffer to append to.
+
+.TP
+.B state
+A state for providing flags and handling interrupts during long running operations. There is no state.handle(). There is no "callbacks" structure. There is no data structure passed to these functions.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpayload.h\fP(3), \fIfll_fss_payload_read\fP(3), \fIfll_fss_payload_write\fP(3), \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_write()\fP, \fIfl_fss_basic_list_object_write()\fP, \fIf_memory_array_increase()\fP, \fIfl_fss_basic_list_content_write()\fP, \fIfl_fss_basic_list_object_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch.3
new file mode 100644 (file)
index 0000000..fc92711
--- /dev/null
@@ -0,0 +1,170 @@
+.TH fll_fss_snatch "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_ranges_t           \fP\fIobjects\fP,
+    \fBconst f_rangess_t          \fP\fIcontents\fP,
+    \fBconst f_string_static_t    \fP\fInames\fP,
+    \fBconst f_number_unsigned_t  \fP\fIsize\fP,
+    \fBf_string_dynamic_t *const  \fP\fIvalues\fP,
+    \fBuint8_t                    \fP\fImatches\fP,
+    \fBf_number_unsigned_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values when matched.
+.PP
+Only the first match for each distinct object is snatched. Only the first content for each object is snatched.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_append_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B values
+An array of values where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_apart.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_apart.3
new file mode 100644 (file)
index 0000000..d55e6d0
--- /dev/null
@@ -0,0 +1,193 @@
+.TH fll_fss_snatch_apart "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_apart \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_apart\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBconst f_ranges_t            \fP\fIobjects\fP,
+    \fBconst f_rangess_t           \fP\fIcontents\fP,
+    \fBconst f_string_static_t     \fP\fInames\fP,
+    \fBconst f_number_unsigned_t   \fP\fIsize\fP,
+    \fBf_string_dynamics_t *const  \fP\fIvalues\fP,
+    \fBuint8_t                     \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values when matched.
+.PP
+All matches for each object is snatched. All content for each object is snatched.
+.PP
+Multiple contents for a single object are stored in separate strings.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_compare_dynamic_partial_trim_string(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B values
+An array of values where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_trim()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_partial_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map.3
new file mode 100644 (file)
index 0000000..2b86805
--- /dev/null
@@ -0,0 +1,214 @@
+.TH fll_fss_snatch_map "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_map \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_map\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBconst f_ranges_t            \fP\fIobjects\fP,
+    \fBconst f_rangess_t           \fP\fIcontents\fP,
+    \fBconst f_string_static_t     \fP\fInames\fP,
+    \fBconst f_number_unsigned_t   \fP\fIsize\fP,
+    \fBf_string_maps_t *const      \fP\fIvalues\fP,
+    \fBuint8_t                     \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values to a map when matched.
+.PP
+Only the first match for each distinct object and map name is snatched (map names are therefore distinct). Only the first content map value for each object and map name is snatched.
+.PP
+The first content is considered the map name, all other content are considered a map value.
+.PP
+This will ignore any object that has no map name.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_append_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B values
+An array of map arrays where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_apart.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_apart.3
new file mode 100644 (file)
index 0000000..bf6c8d2
--- /dev/null
@@ -0,0 +1,214 @@
+.TH fll_fss_snatch_map_apart "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_map_apart \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_map_apart\fP(
+    \fBconst f_string_static_t      \fP\fIbuffer\fP,
+    \fBconst f_ranges_t             \fP\fIobjects\fP,
+    \fBconst f_rangess_t            \fP\fIcontents\fP,
+    \fBconst f_string_static_t      \fP\fInames\fP,
+    \fBconst f_number_unsigned_t    \fP\fIsize\fP,
+    \fBf_string_map_multis_t *const \fP\fIvalues\fP,
+    \fBuint8_t                      \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const  \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values to a multi map when matched.
+.PP
+All matches for each object and map name is snatched. All content map values for each object and map name is snatched.
+.PP
+The first content value is considered the map name, all other content values are considered a map value. Multiple contents, after the first, for a single object are stored in separate map value strings. Content for multiple identical objects and map names are added in separate maps from other objects (map names are therefore non-distinct).
+.PP
+This will ignore any object that has no map name.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_append_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B values
+An array of multi map arrays where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multis_t {
+  f_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t    \fIused\fP;
+  f_number_unsigned_t    \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_mash.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_mash.3
new file mode 100644 (file)
index 0000000..24d2334
--- /dev/null
@@ -0,0 +1,244 @@
+.TH fll_fss_snatch_map_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_map_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_map_mash\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBconst f_ranges_t            \fP\fIobjects\fP,
+    \fBconst f_rangess_t           \fP\fIcontents\fP,
+    \fBconst f_string_static_t     \fP\fInames\fP,
+    \fBconst f_number_unsigned_t   \fP\fIsize\fP,
+    \fBconst f_string_static_t     \fP\fIglue\fP,
+    \fBf_string_maps_t *const      \fP\fIvalues\fP,
+    \fBuint8_t                     \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values to a map when matched.
+.PP
+Only the first match for each distinct object and map name is snatched (map names are therefore distinct). All content values for each object and map name is snatched.
+.PP
+The first content value is considered the map name, all other content values are considered a map value. Multiple contents, after the first, for a single object are appended to a single map value string using the provided glue.
+.PP
+This will ignore any object that has no map name.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_mash_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B glue
+A string to append between each duplicate name found when "snatching".
+
+.TP
+.B values
+An array of multi map value arrays where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_mash_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_mash_apart.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_mash_apart.3
new file mode 100644 (file)
index 0000000..b125929
--- /dev/null
@@ -0,0 +1,244 @@
+.TH fll_fss_snatch_map_mash_apart "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_map_mash_apart \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_map_mash_apart\fP(
+    \fBconst f_string_static_t      \fP\fIbuffer\fP,
+    \fBconst f_ranges_t             \fP\fIobjects\fP,
+    \fBconst f_rangess_t            \fP\fIcontents\fP,
+    \fBconst f_string_static_t      \fP\fInames\fP,
+    \fBconst f_number_unsigned_t    \fP\fIsize\fP,
+    \fBconst f_string_static_t      \fP\fIglue\fP,
+    \fBf_string_map_multis_t *const \fP\fIvalues\fP,
+    \fBuint8_t                      \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const  \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values to a multi map when matched.
+.PP
+All matches for each object is snatched. All content for each object and map name is snatched.
+.PP
+The first content value is considered the map name, all other content values are considered a map value. Multiple contents, after the first, for a single object are appended to a single map value string using the provided glue. Content for multiple identical objects are added in separate maps from other objects (map names are therefore non-distinct).
+.PP
+This will ignore any object that has no map name.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_append_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B glue
+A string to append between each duplicate name found when "snatching".
+
+.TP
+.B values
+An array of multi map value arrays where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_map_multis_t {
+  f_string_map_multi_t  *\fIarray\fP;
+  f_number_unsigned_t    \fIused\fP;
+  f_number_unsigned_t    \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_mash_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_together.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_map_together.3
new file mode 100644 (file)
index 0000000..45caf17
--- /dev/null
@@ -0,0 +1,244 @@
+.TH fll_fss_snatch_map_together "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_map_together \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_map_together\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBconst f_ranges_t            \fP\fIobjects\fP,
+    \fBconst f_rangess_t           \fP\fIcontents\fP,
+    \fBconst f_string_static_t     \fP\fInames\fP,
+    \fBconst f_number_unsigned_t   \fP\fIsize\fP,
+    \fBconst f_string_static_t     \fP\fIglue\fP,
+    \fBf_string_maps_t *const      \fP\fIvalues\fP,
+    \fBuint8_t                     \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values to a map when matched.
+.PP
+All matches for each distinct object and map name is snatched. All content map values for each distinct object and map name is snatched.
+.PP
+The first content is considered the map name, all other content are considered a map value. Multiple contents, after the first, for each distinct object and map names are appended to a single map value string using the provided glue (map names are therefore distinct).
+.PP
+This will ignore any object that has no map name.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_append_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B glue
+A string to append between each duplicate name found when "snatching".
+
+.TP
+.B values
+An array of map arrays where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_mash_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_mash.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_mash.3
new file mode 100644 (file)
index 0000000..8a2a6fd
--- /dev/null
@@ -0,0 +1,202 @@
+.TH fll_fss_snatch_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_mash\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_ranges_t           \fP\fIobjects\fP,
+    \fBconst f_rangess_t          \fP\fIcontents\fP,
+    \fBconst f_string_static_t    \fP\fInames\fP,
+    \fBconst f_number_unsigned_t  \fP\fIsize\fP,
+    \fBconst f_string_static_t    \fP\fIglue\fP,
+    \fBf_string_dynamic_t *const  \fP\fIvalues\fP,
+    \fBuint8_t                    \fP\fImatches\fP,
+    \fBf_number_unsigned_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values when matched.
+.PP
+Only the first match for each distinct object is snatched. All content for each object is snatched.
+.PP
+Multiple contents for a single object are appended using the provided glue.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_mash_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B glue
+A string to append between each duplicate name found when "snatching".
+
+.TP
+.B values
+An array of values where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_mash_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_mash_apart.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_mash_apart.3
new file mode 100644 (file)
index 0000000..6f15e6b
--- /dev/null
@@ -0,0 +1,223 @@
+.TH fll_fss_snatch_mash_apart "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_mash_apart \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_mash_apart\fP(
+    \fBconst f_string_static_t     \fP\fIbuffer\fP,
+    \fBconst f_ranges_t            \fP\fIobjects\fP,
+    \fBconst f_rangess_t           \fP\fIcontents\fP,
+    \fBconst f_string_static_t     \fP\fInames\fP,
+    \fBconst f_number_unsigned_t   \fP\fIsize\fP,
+    \fBconst f_string_static_t     \fP\fIglue\fP,
+    \fBf_string_dynamics_t *const  \fP\fIvalues\fP,
+    \fBuint8_t                     \fP\fImatches\fP,
+    \fBf_number_unsigneds_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values when matched.
+.PP
+All matches for each object is snatched. All content for each object is snatched.
+.PP
+Multiple contents for a single object are appended using the provided glue. Content for multiple identical objects are added in separate strings from other objects.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_append_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B glue
+A string to append between each duplicate name found when "snatching".
+
+.TP
+.B values
+An array of values where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_mash_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_together.3 b/level_2/fll_fss/data/documentation/man/man3/fll_fss_snatch_together.3
new file mode 100644 (file)
index 0000000..e457cac
--- /dev/null
@@ -0,0 +1,200 @@
+.TH fll_fss_snatch_together "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_snatch_together \-
+.SH SYNOPSIS
+.nf
+.B #include <fss.h>
+.sp
+\fBf_status_t fll_fss_snatch_together\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_ranges_t           \fP\fIobjects\fP,
+    \fBconst f_rangess_t          \fP\fIcontents\fP,
+    \fBconst f_string_static_t    \fP\fInames\fP,
+    \fBconst f_number_unsigned_t  \fP\fIsize\fP,
+    \fBconst f_string_static_t    \fP\fIglue\fP,
+    \fBf_string_dynamic_t *const  \fP\fIvalues\fP,
+    \fBuint8_t                    \fP\fImatches\fP,
+    \fBf_number_unsigned_t *const \fP\fIindexs\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform simple search through all objects against the given set, saving all values when matched.
+.PP
+All matches for each object is snatched. Multiple contents for all objects are appended using the provided glue.
+.PP
+This will trim the object names when comparing (removing leading/trailing whitespace). This will strip NULL characters when copying.
+.PP
+This performs only a simple search algorithm that should be acceptable for small sets where performance is generally not a concern.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_partial_mash_nulless(). Errors (with error bit) from: f_compare_dynamic_partial_trim_string().
+.SH PARAMETERS
+.TP
+.B buffer
+The buffer to read from.
+
+.TP
+.B objects
+This object mappings to process.
+
+.TP
+.B contents
+This content mappings to process.
+
+.TP
+.B names
+An array of strings to "snatch" from the buffer.
+
+.TP
+.B size
+The total size of the names and values arrays.
+
+.TP
+.B glue
+A string to append between each duplicate name found when "snatching".
+
+.TP
+.B values
+An array of values where "snatched" content is stored.
+
+.TP
+.B matches
+(optional) An array representing the if an Object was matched.
+
+.TP
+.B indexs
+(optional) An array representing the index within the Objects where the Content match was made.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not when there is no buffer, objects or contents to process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss.h\fP(3), \fIfll_fss_identify\fP(3), \fIfll_fss_snatch\fP(3), \fIfll_fss_snatch_apart\fP(3), \fIfll_fss_snatch_map\fP(3), \fIfll_fss_snatch_map_apart\fP(3), \fIfll_fss_snatch_map_mash\fP(3), \fIfll_fss_snatch_map_mash_apart\fP(3), \fIfll_fss_snatch_map_together\fP(3), \fIfll_fss_snatch_mash\fP(3), \fIfll_fss_snatch_mash_apart\fP(3), \fIfll_fss_snatch_together\fP(3), \fIf_string_dynamic_partial_mash_nulless()\fP, \fIf_compare_dynamic_partial_trim_string()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_compare_trim()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss_status_string/data/documentation/man/man3/fll_fss_status_string_from.3 b/level_2/fll_fss_status_string/data/documentation/man/man3/fll_fss_status_string_from.3
new file mode 100644 (file)
index 0000000..32235b4
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fll_fss_status_string_from "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_status_string_from \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_status_string.h>
+.sp
+\fBf_status_t fll_fss_status_string_from\fP(
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBf_status_t *const       \fP\fIcode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert FSS status codes from their string equivalents to a status code.
+.PP
+Error, warning, and signal flags will not be assigned to the code.
+.PP
+This processes the string until either a match or NULL is reached.
+.PP
+F_data (with error bit) if not found. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_conversion_character_is_decimal(). Errors (with error bit) from: fl_status_string_from().
+.SH PARAMETERS
+.TP
+.B name
+The status name to process.
+
+.TP
+.B code
+The status number a matched string represents.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if string is empty.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_status_string.h\fP(3), \fIfll_fss_status_string_from\fP(3), \fIfll_fss_status_string_to\fP(3), \fIf_conversion_character_is_decimal()\fP, \fIfl_status_string_from()\fP, \fIfl_status_string_from()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_fss_status_string/data/documentation/man/man3/fll_fss_status_string_to.3 b/level_2/fll_fss_status_string/data/documentation/man/man3/fll_fss_status_string_to.3
new file mode 100644 (file)
index 0000000..f1587e2
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fll_fss_status_string_to "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_fss_status_string_to \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_status_string.h>
+.sp
+\fBf_status_t fll_fss_status_string_to\fP(
+    \fBconst f_status_t         \fP\fIcode\fP,
+    \fBf_string_static_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert code codes to their string equivalents.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_status_string_to().
+.SH PARAMETERS
+.TP
+.B code
+The status number to process.
+
+.TP
+.B name
+The status name that represents the given code.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_status_string.h\fP(3), \fIfll_fss_status_string_from\fP(3), \fIfll_fss_status_string_to\fP(3), \fIf_status_string_to()\fP, \fIf_status_string_to()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_escape.3 b/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_escape.3
new file mode 100644 (file)
index 0000000..6321f0d
--- /dev/null
@@ -0,0 +1,103 @@
+.TH fll_iki_content_escape "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_iki_content_escape \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t fll_iki_content_escape\fP(
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst f_string_static_t   \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIescaped\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Escape a string to allow it to be used in its entirety as an IKI content.
+.PP
+This does not copy NULL characters.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B content
+The string to escape.
+
+.TP
+.B quote
+The quote character in use. This must be either a single quote (') (U+0027), double quote (") (U+0022), or grave (`) (U+0060).
+@param escaped
+  The content whose data is escaped.
+  The escaped string data is appended to this, so set the escaped.used = 0 if "replace" behavior is desired.
+
+.TP
+.B escaped
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIfll_iki_content_escape\fP(3), \fIfll_iki_content_partial_escape\fP(3), \fIfll_iki_content_partial_unescape\fP(3), \fIfll_iki_content_unescape\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_partial_escape.3 b/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_partial_escape.3
new file mode 100644 (file)
index 0000000..d854a6c
--- /dev/null
@@ -0,0 +1,128 @@
+.TH fll_iki_content_partial_escape "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_iki_content_partial_escape \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t fll_iki_content_partial_escape\fP(
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBconst f_string_static_t   \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIescaped\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Escape a string, found within the given range, to allow it to be used in its entirety as an IKI content.
+.PP
+This does not copy NULL characters.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B content
+The string to escape.
+
+.TP
+.B range
+The range within the buffer that represents the content.
+
+.TP
+.B quote
+The quote character in use. This must be either a single quote (') (U+0027), double quote (") (U+0022), or grave (`) (U+0060).
+@param escaped
+  The content whose data is escaped.
+  The escaped string data is appended to this, so set the escaped.used = 0 if "replace" behavior is desired.
+
+.TP
+.B escaped
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIfll_iki_content_escape\fP(3), \fIfll_iki_content_partial_escape\fP(3), \fIfll_iki_content_partial_unescape\fP(3), \fIfll_iki_content_unescape\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_partial_unescape.3 b/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_partial_unescape.3
new file mode 100644 (file)
index 0000000..7c1ec5a
--- /dev/null
@@ -0,0 +1,128 @@
+.TH fll_iki_content_partial_unescape "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_iki_content_partial_unescape \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t fll_iki_content_partial_unescape\fP(
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst f_range_t           \fP\fIrange\fP,
+    \fBconst f_string_static_t   \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIunescaped\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unescape a string, found within the given range, from IKI content to allow it to be used normally.
+.PP
+This does not copy NULL characters.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_syntax (with error bit) if the given string is invalid, such as having an undelimited quote.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B content
+The string to escape.
+
+.TP
+.B range
+The range within the buffer that represents the content.
+
+.TP
+.B quote
+The quote character in use. This must be either a single quote (') (U+0027), double quote (") (U+0022), or grave (`) (U+0060).
+@param unescaped
+  The content whose data is unescaped.
+  The unescaped string data is appended to this, so set the unescaped.used = 0 if "replace" behavior is desired.
+
+.TP
+.B unescaped
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIfll_iki_content_escape\fP(3), \fIfll_iki_content_partial_escape\fP(3), \fIfll_iki_content_partial_unescape\fP(3), \fIfll_iki_content_unescape\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_unescape.3 b/level_2/fll_iki/data/documentation/man/man3/fll_iki_content_unescape.3
new file mode 100644 (file)
index 0000000..640b54f
--- /dev/null
@@ -0,0 +1,103 @@
+.TH fll_iki_content_unescape "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_iki_content_unescape \-
+.SH SYNOPSIS
+.nf
+.B #include <iki.h>
+.sp
+\fBf_status_t fll_iki_content_unescape\fP(
+    \fBconst f_string_static_t   \fP\fIcontent\fP,
+    \fBconst f_string_static_t   \fP\fIquote\fP,
+    \fBf_string_dynamic_t *const \fP\fIunescaped\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Unescape a string from IKI content to allow it to be used normally.
+.PP
+This does not copy NULL characters.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_syntax (with error bit) if the given string is invalid, such as having an undelimited quote.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B content
+The string to escape.
+
+.TP
+.B quote
+The quote character in use. This must be either a single quote (') (U+0027), double quote (") (U+0022), or grave (`) (U+0060).
+@param unescaped
+  The content whose data is unescaped.
+  The unescaped string data is appended to this, so set the unescaped.used = 0 if "replace" behavior is desired.
+
+.TP
+.B unescaped
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki.h\fP(3), \fIfll_iki_content_escape\fP(3), \fIfll_iki_content_partial_escape\fP(3), \fIfll_iki_content_partial_unescape\fP(3), \fIfll_iki_content_unescape\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print.3 b/level_2/fll_print/data/documentation/man/man3/fll_print.3
new file mode 100644 (file)
index 0000000..b4777cb
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print() that uses locking.
+.PP
+Success from: f_print().
+.PP
+Errors (with error bit) from: f_print().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print()\fP, \fIf_print()\fP, \fIf_print()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_character.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_character.3
new file mode 100644 (file)
index 0000000..7349929
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fll_print_character "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_character \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_character\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBf_file_t       \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_character() that uses locking.
+.PP
+Success from: f_print_character().
+.PP
+Errors (with error bit) from: f_print_character().
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_character()\fP, \fIf_print_character()\fP, \fIf_print_character()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_character()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_character_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_character_safely.3
new file mode 100644 (file)
index 0000000..749f467
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fll_print_character_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_character_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_character_safely\fP(
+    \fBconst f_char_t \fP\fIcharacter\fP,
+    \fBf_file_t       \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_character_safely() that uses locking.
+.PP
+Success from: f_print_character_safely().
+.PP
+Errors (with error bit) from: f_print_character_safely().
+.SH PARAMETERS
+.TP
+.B character
+The character to verify as safe or not and then print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_character_safely()\fP, \fIf_print_character_safely()\fP, \fIf_print_character_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_character_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic.3
new file mode 100644 (file)
index 0000000..a394553
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic() that uses locking.
+.PP
+Success from: f_print_dynamic().
+.PP
+Errors (with error bit) from: f_print_dynamic().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial.3
new file mode 100644 (file)
index 0000000..06bc398
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_partial\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_partial() that uses locking.
+.PP
+Success from: f_print_dynamic_partial().
+.PP
+Errors (with error bit) from: f_print_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_partial()\fP, \fIf_print_dynamic_partial()\fP, \fIf_print_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..8aa909a
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_partial_raw() that uses locking.
+.PP
+Success from: f_print_dynamic_partial_raw().
+.PP
+Errors (with error bit) from: f_print_dynamic_partial_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_partial_raw()\fP, \fIf_print_dynamic_partial_raw()\fP, \fIf_print_dynamic_partial_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_partial_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..462b83c
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_partial_raw_safely() that uses locking.
+.PP
+Success from: f_print_dynamic_partial_raw_safely().
+.PP
+Errors (with error bit) from: f_print_dynamic_partial_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_partial_raw_safely()\fP, \fIf_print_dynamic_partial_raw_safely()\fP, \fIf_print_dynamic_partial_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_partial_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..1340294
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_partial_safely() that uses locking.
+.PP
+Success from: f_print_dynamic_partial_safely().
+.PP
+Errors (with error bit) from: f_print_dynamic_partial_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_partial_safely()\fP, \fIf_print_dynamic_partial_safely()\fP, \fIf_print_dynamic_partial_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_partial_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_raw.3
new file mode 100644 (file)
index 0000000..916e61c
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_raw() that uses locking.
+.PP
+Success from: f_print_dynamic_raw().
+.PP
+Errors (with error bit) from: f_print_dynamic_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_raw()\fP, \fIf_print_dynamic_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..6c2090f
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_raw_safely() that uses locking.
+.PP
+Success from: f_print_dynamic_raw_safely().
+.PP
+Errors (with error bit) from: f_print_dynamic_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_raw_safely()\fP, \fIf_print_dynamic_raw_safely()\fP, \fIf_print_dynamic_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_dynamic_safely.3
new file mode 100644 (file)
index 0000000..7b63429
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_dynamic_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_dynamic_safely() that uses locking.
+.PP
+Success from: f_print_dynamic_safely().
+.PP
+Errors (with error bit) from: f_print_dynamic_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_dynamic_safely()\fP, \fIf_print_dynamic_safely()\fP, \fIf_print_dynamic_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_dynamic_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except.3
new file mode 100644 (file)
index 0000000..af434e2
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except() that uses locking.
+.PP
+Success from: f_print_except().
+.PP
+Errors (with error bit) from: f_print_except().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except()\fP, \fIf_print_except()\fP, \fIf_print_except()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic.3
new file mode 100644 (file)
index 0000000..17b55e2
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic() that uses locking.
+.PP
+Success from: f_print_except_dynamic().
+.PP
+Errors (with error bit) from: f_print_except_dynamic().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic()\fP, \fIf_print_except_dynamic()\fP, \fIf_print_except_dynamic()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial.3
new file mode 100644 (file)
index 0000000..3ca5bf1
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_except_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_partial() that uses locking.
+.PP
+Success from: f_print_except_dynamic_partial().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_partial()\fP, \fIf_print_except_dynamic_partial()\fP, \fIf_print_except_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..ab3d183
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_except_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_partial_raw() that uses locking.
+.PP
+Success from: f_print_except_dynamic_partial_raw().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_partial_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_partial_raw()\fP, \fIf_print_except_dynamic_partial_raw()\fP, \fIf_print_except_dynamic_partial_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..03cd5f5
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_except_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_partial_raw_safely() that uses locking.
+.PP
+Success from: f_print_except_dynamic_partial_raw_safely().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_partial_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_partial_raw_safely()\fP, \fIf_print_except_dynamic_partial_raw_safely()\fP, \fIf_print_except_dynamic_partial_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..acf887f
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_except_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_partial_safely() that uses locking.
+.PP
+Success from: f_print_except_dynamic_partial_safely().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_partial_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_partial_safely()\fP, \fIf_print_except_dynamic_partial_safely()\fP, \fIf_print_except_dynamic_partial_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_raw.3
new file mode 100644 (file)
index 0000000..5aa32de
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_except_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_raw() that uses locking.
+.PP
+Success from: f_print_except_dynamic_raw().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_raw()\fP, \fIf_print_except_dynamic_raw()\fP, \fIf_print_except_dynamic_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..c5ca9b7
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_except_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_raw_safely() that uses locking.
+.PP
+Success from: f_print_except_dynamic_raw_safely().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_raw_safely()\fP, \fIf_print_except_dynamic_raw_safely()\fP, \fIf_print_except_dynamic_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_dynamic_safely.3
new file mode 100644 (file)
index 0000000..d0e6f44
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_except_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_safely() that uses locking.
+.PP
+Success from: f_print_except_dynamic_safely().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_safely()\fP, \fIf_print_except_dynamic_safely()\fP, \fIf_print_except_dynamic_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in.3
new file mode 100644 (file)
index 0000000..ba209c4
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_except_in "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in() that uses locking.
+.PP
+Success from: f_print_except_in().
+.PP
+Errors (with error bit) from: f_print_except_in().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in()\fP, \fIf_print_except_in()\fP, \fIf_print_except_in()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic.3
new file mode 100644 (file)
index 0000000..82b24ca
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_except_in_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic()\fP, \fIf_print_except_in_dynamic()\fP, \fIf_print_except_in_dynamic()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial.3
new file mode 100644 (file)
index 0000000..d1d4242
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_except_in_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_partial() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_partial().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_partial()\fP, \fIf_print_except_in_dynamic_partial()\fP, \fIf_print_except_in_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..90e8a69
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_except_in_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_partial_raw() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_partial_raw().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_partial_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_partial_raw()\fP, \fIf_print_except_in_dynamic_partial_raw()\fP, \fIf_print_except_in_dynamic_partial_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_partial_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..9ef732d
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_except_in_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_partial_raw_safely() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_partial_raw_safely().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_partial_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_partial_raw_safely()\fP, \fIf_print_except_in_dynamic_partial_raw_safely()\fP, \fIf_print_except_in_dynamic_partial_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_partial_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..06548fb
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_except_in_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_partial_safely() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_partial_safely().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_partial_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_partial_safely()\fP, \fIf_print_except_in_dynamic_partial_safely()\fP, \fIf_print_except_in_dynamic_partial_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_partial_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_raw.3
new file mode 100644 (file)
index 0000000..f769269
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_except_in_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_raw() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_raw().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_raw()\fP, \fIf_print_except_in_dynamic_raw()\fP, \fIf_print_except_in_dynamic_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..376b12e
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_except_in_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_raw_safely() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_raw_safely().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_raw_safely()\fP, \fIf_print_except_in_dynamic_raw_safely()\fP, \fIf_print_except_in_dynamic_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_dynamic_safely.3
new file mode 100644 (file)
index 0000000..ebdb38c
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_except_in_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_dynamic_safely() that uses locking.
+.PP
+Success from: f_print_except_in_dynamic_safely().
+.PP
+Errors (with error bit) from: f_print_except_in_dynamic_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_dynamic_safely()\fP, \fIf_print_except_in_dynamic_safely()\fP, \fIf_print_except_in_dynamic_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_dynamic_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_raw.3
new file mode 100644 (file)
index 0000000..781a7ba
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_except_in_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_raw() that uses locking.
+.PP
+Success from: f_print_except_in_raw().
+.PP
+Errors (with error bit) from: f_print_except_in_raw().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_raw()\fP, \fIf_print_except_in_raw()\fP, \fIf_print_except_in_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_raw_safely.3
new file mode 100644 (file)
index 0000000..b0e86f4
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_except_in_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_raw_safely() that uses locking.
+.PP
+Success from: f_print_except_in_raw_safely().
+.PP
+Errors (with error bit) from: f_print_except_in_raw_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_raw_safely()\fP, \fIf_print_except_in_raw_safely()\fP, \fIf_print_except_in_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_in_safely.3
new file mode 100644 (file)
index 0000000..64876ae
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_except_in_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_in_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_in_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_in_safely() that uses locking.
+.PP
+Success from: f_print_except_in_safely().
+.PP
+Errors (with error bit) from: f_print_except_in_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_in_safely()\fP, \fIf_print_except_in_safely()\fP, \fIf_print_except_in_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_in_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_raw.3
new file mode 100644 (file)
index 0000000..45b7b87
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_except_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_raw() that uses locking.
+.PP
+Success from: f_print_except_raw().
+.PP
+Errors (with error bit) from: f_print_except_raw().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_raw()\fP, \fIf_print_except_raw()\fP, \fIf_print_except_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_raw_safely.3
new file mode 100644 (file)
index 0000000..b573c38
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_except_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_raw_safely() that uses locking.
+.PP
+Success from: f_print_except_raw_safely().
+.PP
+Errors (with error bit) from: f_print_except_raw_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_raw_safely()\fP, \fIf_print_except_raw_safely()\fP, \fIf_print_except_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_except_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_except_safely.3
new file mode 100644 (file)
index 0000000..e29199a
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_except_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_except_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_except_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_safely() that uses locking.
+.PP
+Success from: f_print_except_safely().
+.PP
+Errors (with error bit) from: f_print_except_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_safely()\fP, \fIf_print_except_safely()\fP, \fIf_print_except_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_format.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_format.3
new file mode 100644 (file)
index 0000000..4abd754
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fll_print_format "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_format \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_format\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_file_t         \fP\fIfile\fP,
+    \fB...              \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_format() that uses locking.
+.PP
+Success from: fl_print_format().
+.PP
+Errors (with error bit) from: fl_print_format().
+.SH PARAMETERS
+.TP
+.B string
+The formatted string to process and output. This is a NULL terminated string.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.TP
+.B
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_format()\fP, \fIfl_print_format()\fP, \fIfl_print_format()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIva_start()\fP, \fIva_end()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_format_convert.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_format_convert.3
new file mode 100644 (file)
index 0000000..2d75443
--- /dev/null
@@ -0,0 +1,81 @@
+.TH fll_print_format_convert "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_format_convert \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_string_t fll_print_format_convert\fP(
+    \fBconst f_string_t \fP\fIcurrent\fP,
+    \fBf_file_t         \fP\fIfile\fP,
+    \fBva_list          \fP\fIap\fP,
+    \fBf_status_t      *\fP\fIstatus\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_format_convert() that uses locking.
+.PP
+Set to NULL to not use.
+.PP
+The status parameter will be set as follows:
+.PP
+F_stream_not if file.stream is NULL.
+.PP
+Success from: fl_print_format_convert().
+.PP
+Errors (with error bit) from: fl_print_format_convert().
+.SH PARAMETERS
+.TP
+.B current
+The current character position within the string.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.TP
+.B ap
+The variable arguments list.
+
+.TP
+.B status
+The status is stored here rather then via the return.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+This returns a string at either the start position (if nothing done or an error occurred) or at the character last processed. The caller is expected to increment past this if they wish to continue processing the string.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_format_convert()\fP, \fIfl_print_format_convert()\fP, \fIfl_print_format_convert()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_format_convert()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_raw.3
new file mode 100644 (file)
index 0000000..fb96b6f
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_raw\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_raw() that uses locking.
+.PP
+Success from: f_print_raw().
+.PP
+Errors (with error bit) from: f_print_raw().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_raw()\fP, \fIf_print_raw()\fP, \fIf_print_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_raw_safely.3
new file mode 100644 (file)
index 0000000..1b27541
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_raw_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_raw_safely() that uses locking.
+.PP
+Success from: f_print_raw_safely().
+.PP
+Errors (with error bit) from: f_print_raw_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_raw_safely()\fP, \fIf_print_raw_safely()\fP, \fIf_print_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_raw_terminated.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_raw_terminated.3
new file mode 100644 (file)
index 0000000..4077f0b
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fll_print_raw_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_raw_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_raw_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_file_t         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_raw_terminated() that uses locking.
+.PP
+Success from: f_print_raw_terminated().
+.PP
+Errors (with error bit) from: f_print_raw_terminated().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_raw_terminated()\fP, \fIf_print_raw_terminated()\fP, \fIf_print_raw_terminated()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_raw_terminated()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_safely.3
new file mode 100644 (file)
index 0000000..199599f
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_safely() that uses locking.
+.PP
+Success from: f_print_safely().
+.PP
+Errors (with error bit) from: f_print_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_safely()\fP, \fIf_print_safely()\fP, \fIf_print_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_safely_terminated.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_safely_terminated.3
new file mode 100644 (file)
index 0000000..eb83437
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fll_print_safely_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_safely_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_safely_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_file_t         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_safely_terminated() that uses locking.
+.PP
+Success from: f_print_safely_terminated().
+.PP
+Errors (with error bit) from: f_print_safely_terminated().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_safely_terminated()\fP, \fIf_print_safely_terminated()\fP, \fIf_print_safely_terminated()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_safely_terminated()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_string_va.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_string_va.3
new file mode 100644 (file)
index 0000000..3d20eb6
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_string_va "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_string_va \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_string_va\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_file_t         \fP\fIfile\fP,
+    \fBva_list          \fP\fIap\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_string_va() that uses locking.
+.PP
+Success from: fl_print_string_va().
+.PP
+Errors (with error bit) from: fl_print_string_va().
+.SH PARAMETERS
+.TP
+.B string
+The formatted string to process and output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.TP
+.B ap
+The variable list. The va_start(ap, string) and va_end(ap) is required to be called outside this function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_string_va()\fP, \fIfl_print_string_va()\fP, \fIfl_print_string_va()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_string_va()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_terminated.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_terminated.3
new file mode 100644 (file)
index 0000000..dc55c6c
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fll_print_terminated "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_terminated \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_terminated\fP(
+    \fBconst f_string_t \fP\fIstring\fP,
+    \fBf_file_t         \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_terminated() that uses locking.
+.PP
+Success from: f_print_terminated().
+.PP
+Errors (with error bit) from: f_print_terminated().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_terminated()\fP, \fIf_print_terminated()\fP, \fIf_print_terminated()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_terminated()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim.3
new file mode 100644 (file)
index 0000000..55a15bc
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_trim "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim() that uses locking.
+.PP
+Success from: fl_print_trim().
+.PP
+Errors (with error bit) from: fl_print_trim().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim()\fP, \fIfl_print_trim()\fP, \fIfl_print_trim()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic.3
new file mode 100644 (file)
index 0000000..6f18e0f
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_trim_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_dynamic() that uses locking.
+.PP
+Success from: fl_print_trim_dynamic().
+.PP
+Errors (with error bit) from: fl_print_trim_dynamic().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_dynamic()\fP, \fIfl_print_trim_dynamic()\fP, \fIfl_print_trim_dynamic()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial.3
new file mode 100644 (file)
index 0000000..6f700ee
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_trim_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_partial\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_dynamic_partial() that uses locking.
+.PP
+Success from: fl_print_trim_dynamic_partial().
+.PP
+Errors (with error bit) from: fl_print_trim_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_dynamic_partial()\fP, \fIfl_print_trim_dynamic_partial()\fP, \fIfl_print_trim_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..8b89f05
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_trim_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_dynamic_partial_raw() that uses locking.
+.PP
+Success from: fl_print_trim_dynamic_partial_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_dynamic_partial_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_dynamic_partial_raw()\fP, \fIfl_print_trim_dynamic_partial_raw()\fP, \fIfl_print_trim_dynamic_partial_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_dynamic_partial_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..1f5403c
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_trim_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_partial() that uses locking.
+.PP
+Success from: f_print_except_dynamic_partial().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_partial()\fP, \fIf_print_except_dynamic_partial()\fP, \fIf_print_except_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..1826b8a
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fll_print_trim_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of f_print_except_dynamic_partial() that uses locking.
+.PP
+Success from: f_print_except_dynamic_partial().
+.PP
+Errors (with error bit) from: f_print_except_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIf_print_except_dynamic_partial()\fP, \fIf_print_except_dynamic_partial()\fP, \fIf_print_except_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_raw.3
new file mode 100644 (file)
index 0000000..d7c9c58
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_trim_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_raw\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_dynamic_raw() that uses locking.
+.PP
+Success from: fl_print_trim_dynamic_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_dynamic_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_dynamic_raw()\fP, \fIfl_print_trim_dynamic_raw()\fP, \fIfl_print_trim_dynamic_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..691980c
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_trim_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_dynamic_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_dynamic_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_dynamic_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_dynamic_raw_safely()\fP, \fIfl_print_trim_dynamic_raw_safely()\fP, \fIfl_print_trim_dynamic_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_dynamic_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_dynamic_safely.3
new file mode 100644 (file)
index 0000000..11f1df3
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fll_print_trim_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_dynamic_safely\fP(
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_t                \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_dynamic_safely() that uses locking.
+.PP
+Success from: fl_print_trim_dynamic_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_dynamic_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_dynamic_safely()\fP, \fIfl_print_trim_dynamic_safely()\fP, \fIfl_print_trim_dynamic_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_dynamic_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except.3
new file mode 100644 (file)
index 0000000..1cc0d9a
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_trim_except "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except() that uses locking.
+.PP
+Success from: fl_print_trim_except().
+.PP
+Errors (with error bit) from: fl_print_trim_except().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except()\fP, \fIfl_print_trim_except()\fP, \fIfl_print_trim_except()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic.3
new file mode 100644 (file)
index 0000000..6f31f8f
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_trim_except_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic()\fP, \fIfl_print_trim_except_dynamic()\fP, \fIfl_print_trim_except_dynamic()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial.3
new file mode 100644 (file)
index 0000000..7ab4236
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_trim_except_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_partial() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_partial().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_partial()\fP, \fIfl_print_trim_except_dynamic_partial()\fP, \fIfl_print_trim_except_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..088c012
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_trim_except_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_partial_raw() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_partial_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_partial_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_raw()\fP, \fIfl_print_trim_except_dynamic_partial_raw()\fP, \fIfl_print_trim_except_dynamic_partial_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_partial_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..e3de789
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_trim_except_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_partial_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_partial_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_partial_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_raw_safely()\fP, \fIfl_print_trim_except_dynamic_partial_raw_safely()\fP, \fIfl_print_trim_except_dynamic_partial_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_partial_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..3c02377
--- /dev/null
@@ -0,0 +1,141 @@
+.TH fll_print_trim_except_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_partial_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_partial_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_partial_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_partial_safely()\fP, \fIfl_print_trim_except_dynamic_partial_safely()\fP, \fIfl_print_trim_except_dynamic_partial_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_partial_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_raw.3
new file mode 100644 (file)
index 0000000..d4d7ce8
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_trim_except_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_raw() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_raw()\fP, \fIfl_print_trim_except_dynamic_raw()\fP, \fIfl_print_trim_except_dynamic_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..2b6bfa2
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_trim_except_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_raw_safely()\fP, \fIfl_print_trim_except_dynamic_raw_safely()\fP, \fIfl_print_trim_except_dynamic_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_dynamic_safely.3
new file mode 100644 (file)
index 0000000..4e51314
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_print_trim_except_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_dynamic_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_dynamic_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_dynamic_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_dynamic_safely()\fP, \fIfl_print_trim_except_dynamic_safely()\fP, \fIfl_print_trim_except_dynamic_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_dynamic_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in.3
new file mode 100644 (file)
index 0000000..84e2cd3
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_trim_except_in "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in() that uses locking.
+.PP
+Success from: fl_print_trim_except_in().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in()\fP, \fIfl_print_trim_except_in()\fP, \fIfl_print_trim_except_in()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic.3
new file mode 100644 (file)
index 0000000..ea0d3b0
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_trim_except_in_dynamic "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic()\fP, \fIfl_print_trim_except_in_dynamic()\fP, \fIfl_print_trim_except_in_dynamic()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial.3
new file mode 100644 (file)
index 0000000..292bddc
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_trim_except_in_dynamic_partial "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_partial\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_partial() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_partial().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_partial().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial()\fP, \fIfl_print_trim_except_in_dynamic_partial()\fP, \fIfl_print_trim_except_in_dynamic_partial()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_raw.3
new file mode 100644 (file)
index 0000000..9fd0be7
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_trim_except_in_dynamic_partial_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_partial_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_partial_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_partial_raw() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_partial_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_partial_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw()\fP, \fIfl_print_trim_except_in_dynamic_partial_raw()\fP, \fIfl_print_trim_except_in_dynamic_partial_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_raw_safely.3
new file mode 100644 (file)
index 0000000..55b2ff3
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_trim_except_in_dynamic_partial_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_partial_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_partial_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_partial_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_partial_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_partial_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_raw_safely()\fP, \fIfl_print_trim_except_in_dynamic_partial_raw_safely()\fP, \fIfl_print_trim_except_in_dynamic_partial_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_partial_safely.3
new file mode 100644 (file)
index 0000000..a39fdb4
--- /dev/null
@@ -0,0 +1,165 @@
+.TH fll_print_trim_except_in_dynamic_partial_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_partial_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_partial_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_partial_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_partial_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_partial_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B range
+The range within the provided string to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_partial_safely()\fP, \fIfl_print_trim_except_in_dynamic_partial_safely()\fP, \fIfl_print_trim_except_in_dynamic_partial_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIf_print_except_dynamic_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_raw.3
new file mode 100644 (file)
index 0000000..91e1fdd
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_trim_except_in_dynamic_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_raw\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_raw() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_raw().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw()\fP, \fIfl_print_trim_except_in_dynamic_raw()\fP, \fIfl_print_trim_except_in_dynamic_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_raw_safely.3
new file mode 100644 (file)
index 0000000..d137350
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_trim_except_in_dynamic_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_raw_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_raw_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_raw_safely()\fP, \fIfl_print_trim_except_in_dynamic_raw_safely()\fP, \fIfl_print_trim_except_in_dynamic_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_dynamic_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_dynamic_safely.3
new file mode 100644 (file)
index 0000000..d58f4e6
--- /dev/null
@@ -0,0 +1,140 @@
+.TH fll_print_trim_except_in_dynamic_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_dynamic_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_dynamic_safely\fP(
+    \fBconst f_string_static_t    \fP\fIbuffer\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_dynamic_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_dynamic_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_dynamic_safely().
+.SH PARAMETERS
+.TP
+.B buffer
+The string to output.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_dynamic_safely()\fP, \fIfl_print_trim_except_in_dynamic_safely()\fP, \fIfl_print_trim_except_in_dynamic_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_dynamic_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_raw.3
new file mode 100644 (file)
index 0000000..ef9d02e
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_trim_except_in_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_raw() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_raw().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_raw()\fP, \fIfl_print_trim_except_in_raw()\fP, \fIfl_print_trim_except_in_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_raw_safely.3
new file mode 100644 (file)
index 0000000..2bdcfee
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_trim_except_in_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_raw_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_raw_safely()\fP, \fIfl_print_trim_except_in_raw_safely()\fP, \fIfl_print_trim_except_in_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_in_safely.3
new file mode 100644 (file)
index 0000000..cd55b5a
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_print_trim_except_in_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_in_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_in_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept_at\fP,
+    \fBconst f_ranges_t           \fP\fIexcept_in\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_in_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_in_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_in_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except_at
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B except_in
+An array of ranges within the string to not print. The array of ranges is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_in_safely()\fP, \fIfl_print_trim_except_in_safely()\fP, \fIfl_print_trim_except_in_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_in_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_raw.3
new file mode 100644 (file)
index 0000000..478201c
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_trim_except_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_raw\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_raw() that uses locking.
+.PP
+Success from: fl_print_trim_except_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_except_raw().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_raw()\fP, \fIfl_print_trim_except_raw()\fP, \fIfl_print_trim_except_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_raw_safely.3
new file mode 100644 (file)
index 0000000..1a08686
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_trim_except_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_raw_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_raw_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_raw_safely()\fP, \fIfl_print_trim_except_raw_safely()\fP, \fIfl_print_trim_except_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_except_safely.3
new file mode 100644 (file)
index 0000000..23690b8
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_print_trim_except_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_except_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_except_safely\fP(
+    \fBconst f_string_t           \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t  \fP\fIoffset\fP,
+    \fBconst f_number_unsigned_t  \fP\fIlength\fP,
+    \fBconst f_number_unsigneds_t \fP\fIexcept\fP,
+    \fBf_file_t                   \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_except_safely() that uses locking.
+.PP
+Success from: fl_print_trim_except_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_except_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B offset
+The inclusive start point to start printing.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B except
+An array of locations within the given string to not print. The array of locations is required/assumed to be in linear order.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_except_safely()\fP, \fIfl_print_trim_except_safely()\fP, \fIfl_print_trim_except_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_except_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_raw.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_raw.3
new file mode 100644 (file)
index 0000000..da6b196
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_trim_raw "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_raw\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_raw() that uses locking.
+.PP
+Success from: fl_print_trim_raw().
+.PP
+Errors (with error bit) from: fl_print_trim_raw().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_raw()\fP, \fIfl_print_trim_raw()\fP, \fIfl_print_trim_raw()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_raw_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_raw_safely.3
new file mode 100644 (file)
index 0000000..abfed95
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_trim_raw_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_raw_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_raw_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_raw_safely() that uses locking.
+.PP
+Success from: fl_print_trim_raw_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_raw_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_raw_safely()\fP, \fIfl_print_trim_raw_safely()\fP, \fIfl_print_trim_raw_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_raw_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_print/data/documentation/man/man3/fll_print_trim_safely.3 b/level_2/fll_print/data/documentation/man/man3/fll_print_trim_safely.3
new file mode 100644 (file)
index 0000000..7ab9899
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fll_print_trim_safely "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_print_trim_safely \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_print_trim_safely\fP(
+    \fBconst f_string_t          \fP\fIstring\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBf_file_t                  \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This is a variation of fl_print_trim_safely() that uses locking.
+.PP
+Success from: fl_print_trim_safely().
+.PP
+Errors (with error bit) from: fl_print_trim_safely().
+.SH PARAMETERS
+.TP
+.B string
+The string to output.
+
+.TP
+.B length
+The total number of characters to print.
+
+.TP
+.B file
+The file structure containing a valid stream to output to, including standard streams such as stdout and stderr.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_stream_not if file.stream is NULL.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_print\fP(3), \fIfll_print_character\fP(3), \fIfll_print_character_safely\fP(3), \fIfll_print_dynamic\fP(3), \fIfll_print_dynamic_partial\fP(3), \fIfll_print_dynamic_partial_raw\fP(3), \fIfll_print_dynamic_partial_raw_safely\fP(3), \fIfll_print_dynamic_partial_safely\fP(3), \fIfll_print_dynamic_raw\fP(3), \fIfll_print_dynamic_raw_safely\fP(3), \fIfll_print_dynamic_safely\fP(3), \fIfll_print_except\fP(3), \fIfll_print_except_dynamic\fP(3), \fIfll_print_except_dynamic_partial\fP(3), \fIfll_print_except_dynamic_partial_raw\fP(3), \fIfll_print_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_dynamic_partial_safely\fP(3), \fIfll_print_except_dynamic_raw\fP(3), \fIfll_print_except_dynamic_raw_safely\fP(3), \fIfll_print_except_dynamic_safely\fP(3), \fIfll_print_except_in\fP(3), \fIfll_print_except_in_dynamic\fP(3), \fIfll_print_except_in_dynamic_partial\fP(3), \fIfll_print_except_in_dynamic_partial_raw\fP(3), \fIfll_print_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_except_in_dynamic_partial_safely\fP(3), \fIfll_print_except_in_dynamic_raw\fP(3), \fIfll_print_except_in_dynamic_raw_safely\fP(3), \fIfll_print_except_in_dynamic_safely\fP(3), \fIfll_print_except_in_raw\fP(3), \fIfll_print_except_in_raw_safely\fP(3), \fIfll_print_except_in_safely\fP(3), \fIfll_print_except_raw\fP(3), \fIfll_print_except_raw_safely\fP(3), \fIfll_print_except_safely\fP(3), \fIfll_print_format\fP(3), \fIfll_print_format_convert\fP(3), \fIfll_print_raw\fP(3), \fIfll_print_raw_safely\fP(3), \fIfll_print_raw_terminated\fP(3), \fIfll_print_safely\fP(3), \fIfll_print_safely_terminated\fP(3), \fIfll_print_string_va\fP(3), \fIfll_print_terminated\fP(3), \fIfll_print_trim\fP(3), \fIfll_print_trim_dynamic\fP(3), \fIfll_print_trim_dynamic_partial\fP(3), \fIfll_print_trim_dynamic_partial_raw\fP(3), \fIfll_print_trim_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_dynamic_partial_safely\fP(3), \fIfll_print_trim_dynamic_raw\fP(3), \fIfll_print_trim_dynamic_raw_safely\fP(3), \fIfll_print_trim_dynamic_safely\fP(3), \fIfll_print_trim_except\fP(3), \fIfll_print_trim_except_dynamic\fP(3), \fIfll_print_trim_except_dynamic_partial\fP(3), \fIfll_print_trim_except_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_dynamic_raw\fP(3), \fIfll_print_trim_except_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_dynamic_safely\fP(3), \fIfll_print_trim_except_in\fP(3), \fIfll_print_trim_except_in_dynamic\fP(3), \fIfll_print_trim_except_in_dynamic_partial\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw\fP(3), \fIfll_print_trim_except_in_dynamic_partial_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_partial_safely\fP(3), \fIfll_print_trim_except_in_dynamic_raw\fP(3), \fIfll_print_trim_except_in_dynamic_raw_safely\fP(3), \fIfll_print_trim_except_in_dynamic_safely\fP(3), \fIfll_print_trim_except_in_raw\fP(3), \fIfll_print_trim_except_in_raw_safely\fP(3), \fIfll_print_trim_except_in_safely\fP(3), \fIfll_print_trim_except_raw\fP(3), \fIfll_print_trim_except_raw_safely\fP(3), \fIfll_print_trim_except_safely\fP(3), \fIfll_print_trim_raw\fP(3), \fIfll_print_trim_raw_safely\fP(3), \fIfll_print_trim_safely\fP(3), \fIfl_print_trim_safely()\fP, \fIfl_print_trim_safely()\fP, \fIfl_print_trim_safely()\fP, \fIflockfile()\fP, \fIfunlockfile()\fP, \fIfl_print_trim_safely()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_data_delete.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_data_delete.3
new file mode 100644 (file)
index 0000000..5c2ce04
--- /dev/null
@@ -0,0 +1,78 @@
+.TH fll_program_data_delete "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_data_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t fll_program_data_delete\fP(
+    \fBfll_program_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete any dynamic allocated data on the program data object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_console_parameters_delete().
+.SH PARAMETERS
+.TP
+.B data
+The program data object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfll_program_data_delete\fP(3), \fIfll_program_data_destroy\fP(3), \fIf_console_parameters_delete()\fP, \fIf_console_parameters_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_data_destroy.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_data_destroy.3
new file mode 100644 (file)
index 0000000..38daaaa
--- /dev/null
@@ -0,0 +1,78 @@
+.TH fll_program_data_destroy "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_data_destroy \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t fll_program_data_destroy\fP(
+    \fBfll_program_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Destroy any dynamic allocated data on the program data object.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_console_parameters_destroy().
+.SH PARAMETERS
+.TP
+.B data
+The program data object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfll_program_data_delete\fP(3), \fIfll_program_data_destroy\fP(3), \fIf_console_parameters_destroy()\fP, \fIf_console_parameters_destroy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_append.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_append.3
new file mode 100644 (file)
index 0000000..9dc457d
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fll_program_parameter_additional_append "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_additional_append \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_additional_append\fP(
+    \fBconst f_string_static_t *const \fP\fIarguments\fP,
+    \fBconst f_number_unsigneds_t     \fP\fIvalues\fP,
+    \fBf_string_dynamics_t *const     \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate new strings from all of the provided locations.
+.PP
+These new strings are appended onto the destination.
+.PP
+Empty console parameters are ignored.
+.PP
+F_array_too_large (with error bit) if a buffer would exceed max length. F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_string_dynamic_append().
+.SH PARAMETERS
+.TP
+.B arguments
+The program argument array to parse. The caller must guarantee that the indexes within values do not exceed the arguments array length.
+
+.TP
+.B values
+The string locations where the console parameters are found.
+
+.TP
+.B destination
+An array of dynamic strings each representing a console parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if nothing to rip, no allocations or reallocations are performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_mash.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_mash.3
new file mode 100644 (file)
index 0000000..fb4361e
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fll_program_parameter_additional_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_additional_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_additional_mash\fP(
+    \fBconst f_string_static_t    \fP\fIglue\fP,
+    \fBconst f_string_static_t   *\fP\fIarguments\fP,
+    \fBconst f_number_unsigneds_t \fP\fIvalues\fP,
+    \fBf_string_dynamic_t *const  \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Mash together all values arguments associated with a given console parameter.
+.PP
+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.
+.PP
+Errors (with error bit) from: f_string_dynamic_mash().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B arguments
+The program argument array to parse. The caller must guarantee that the indexes within values do not exceed the arguments array length.
+
+.TP
+.B values
+The string locations where the console parameters are found.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if nothing to rip, no allocations or reallocations are performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_string_dynamic_mash()\fP, \fIf_string_dynamic_mash()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_rip.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_rip.3
new file mode 100644 (file)
index 0000000..6703768
--- /dev/null
@@ -0,0 +1,97 @@
+.TH fll_program_parameter_additional_rip "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_additional_rip \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_additional_rip\fP(
+    \fBconst f_string_static_t *const \fP\fIarguments\fP,
+    \fBconst f_number_unsigneds_t     \fP\fIvalues\fP,
+    \fBf_string_dynamics_t *const     \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Allocate new strings from all of the provided locations.
+.PP
+The console parameters are trimmed.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_rip_dynamic().
+.SH PARAMETERS
+.TP
+.B arguments
+The program argument array to parse. The caller must guarantee that the indexes within values do not exceed the arguments array length.
+
+.TP
+.B values
+The string locations where the console parameters are found.
+
+.TP
+.B destination
+An array of dynamic strings each representing a console parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if nothing to rip, no allocations or reallocations are performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_rip_dynamic()\fP, \fIf_rip_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_rip_mash.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_additional_rip_mash.3
new file mode 100644 (file)
index 0000000..f2439b8
--- /dev/null
@@ -0,0 +1,127 @@
+.TH fll_program_parameter_additional_rip_mash "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_additional_rip_mash \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_additional_rip_mash\fP(
+    \fBconst f_string_static_t    \fP\fIglue\fP,
+    \fBconst f_string_static_t   *\fP\fIarguments\fP,
+    \fBconst f_number_unsigneds_t \fP\fIvalues\fP,
+    \fBf_string_dynamic_t *const  \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Mash together all values arguments associated with a given console parameter.
+.PP
+The console parameter is trimmed before mashing.
+.PP
+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.
+.PP
+Errors (with error bit) from: f_string_dynamic_mash(). Errors (with error bit) from: f_rip_dynamic().
+.SH PARAMETERS
+.TP
+.B glue
+A string to append between the source and destination, such as a space: ' '.
+
+.TP
+.B arguments
+The program argument array to parse. The caller must guarantee that the indexes within values do not exceed the arguments array length.
+
+.TP
+.B values
+The string locations where the console parameters are found.
+
+.TP
+.B destination
+The destination string the source and glue are appended onto.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if nothing to rip, no allocations or reallocations are performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_string_dynamic_mash()\fP, \fIf_rip_dynamic()\fP, \fIf_string_dynamic_mash()\fP, \fIf_rip_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_context.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_context.3
new file mode 100644 (file)
index 0000000..9ffc4de
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fll_program_parameter_process_context "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_process_context \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_process_context\fP(
+    \fBconst f_uint16s_t         \fP\fIchoices\fP,
+    \fBconst uint8_t             \fP\fImodes\fP,
+    \fBconst uint8_t             \fP\fIright\fP,
+    \fBfll_program_data_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the color context from the parameters and then set the color context based on the choice.
+.PP
+This will allow for the color context and the color sets to be safely used when colors are disabled.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_console_parameter_prioritize_left(). Errors (with error bit) from: f_console_parameter_prioritize_right(). Errors (with error bit) from: f_color_load_context().
+.SH PARAMETERS
+.TP
+.B choices
+An array of color modes. The default, if no mode is specified, will be the last value in the array.
+
+.TP
+.B modes
+An array designating the context modes associated with each choice. This must exactly match the size of the choices array. No bounds checking is performed.
+
+.TP
+.B right
+If TRUE, use the right-most parameter on conflict. If FALSE, use the left-most parameter on conflict.
+
+.TP
+.B main
+The main program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint16_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint16s_t {
+  uint16_t           *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if "values" parameters were expected but not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP, \fIf_color_load_context()\fP, \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP, \fIf_color_load_context()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_context_standard.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_context_standard.3
new file mode 100644 (file)
index 0000000..ebcdd92
--- /dev/null
@@ -0,0 +1,87 @@
+.TH fll_program_parameter_process_context_standard "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_process_context_standard \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_process_context_standard\fP(
+    \fBconst uint8_t             \fP\fIright\fP,
+    \fBfll_program_data_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the color context from the parameters and then set the color context based on the choice.
+.PP
+This will allow for the color context and the color sets to be safely used when colors are disabled.
+.PP
+This is identical to fll_program_parameter_process_context() except it provides the standard choices and modes.
+.PP
+F_memory_not (with error bit) on out of memory. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_console_parameter_prioritize_left(). Errors (with error bit) from: f_console_parameter_prioritize_right(). Errors (with error bit) from: f_color_load_context().
+.SH PARAMETERS
+.TP
+.B right
+If TRUE, use the right-most parameter on conflict. If FALSE, use the left-most parameter on conflict.
+
+.TP
+.B main
+The main program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not if "values" parameters were expected but not found.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIfll_program_parameter_process_context()\fP, \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP, \fIf_color_load_context()\fP, \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP, \fIf_color_load_context()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_empty.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_empty.3
new file mode 100644 (file)
index 0000000..0140049
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fll_program_parameter_process_empty "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_process_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_process_empty\fP(
+    \fBf_color_context_t *const \fP\fIcontext\fP,
+    \fBf_color_set_t *const     \fP\fIsets\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Set the provided context to empty along with all additional color sets.
+.PP
+This will allow for safe usage of the color context and color sets to be safely processed when colors are disabled.
+.PP
+Set to NULL to not use.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B context
+The primary color context to assign.
+
+.TP
+.B sets
+(optional) A NULL terminated array representing additional sets to assign as empty.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a color context structure.
+.PP
+This is intended to be used for printing, and this provides a management structure for all color context related data.
+.PP
+warning: Color context associated with "warning".
+.sp
+.RS
+.nf
+\fB
+struct f_color_context_t {
+  f_color_t             \fIlist\fP;
+  f_color_format_t      \fIformat\fP;
+  uint8_t               \fImode\fP;
+  f_color_set_context_t \fIset\fP;
+  f_string_dynamic_t    \fIerror\fP;
+  f_string_dynamic_t    \fIimportant\fP;
+  f_string_dynamic_t    \fInormal\fP;
+  f_string_dynamic_t    \fInormal_reset\fP;
+  f_string_dynamic_t    \fInotable\fP;
+  f_string_dynamic_t    \fIreset\fP;
+  f_string_dynamic_t    \fIstandout\fP;
+  f_string_dynamic_t    \fIsuccess\fP;
+  f_string_dynamic_t    \fItitle\fP;
+  f_string_dynamic_t    \fIwarning\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Provide a set of two colors, a before and an after.
+.PP
+This is intended to be used for printing, such that the printed code is prefixed with the "before" and postfixed with the "after". These color strings should be NULL terminated.
+.PP
+after: A pointer to the dynamic string representing the after color to assign, set to NULL to disable.
+.sp
+.RS
+.nf
+\fB
+struct f_color_set_t {
+  const f_string_static_t  *\fIbefore\fP;
+  const f_string_static_t  *\fIafter\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_verbosity.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_verbosity.3
new file mode 100644 (file)
index 0000000..21ab418
--- /dev/null
@@ -0,0 +1,114 @@
+.TH fll_program_parameter_process_verbosity "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_process_verbosity \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_process_verbosity\fP(
+    \fBconst f_uint16s_t         \fP\fIchoices\fP,
+    \fBconst uint8_t             \fP\fIverbosity\fP,
+    \fBconst uint8_t             \fP\fIright\fP,
+    \fBfll_program_data_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the verbosity from the parameters and then set the verbosity based on the choice.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_console_parameter_prioritize_left(). Errors (with error bit) from: f_console_parameter_prioritize_right().
+.SH PARAMETERS
+.TP
+.B choices
+The available choices based on parameter ids. The default, if no verbosity is specified, will be the last value in the array.
+
+.TP
+.B verbosity
+An array designating what to set the verbosity to based on the choice made. This must exactly match the size of the choices array. No bounds checking is performed.
+
+.TP
+.B right
+If TRUE, use the right-most parameter on conflict. If FALSE, use the left-most parameter on conflict.
+
+.TP
+.B main
+The main program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint16_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint16s_t {
+  uint16_t           *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_data_not on success but choices.used is 0.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP, \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_verbosity_standard.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_parameter_process_verbosity_standard.3
new file mode 100644 (file)
index 0000000..266f68b
--- /dev/null
@@ -0,0 +1,85 @@
+.TH fll_program_parameter_process_verbosity_standard "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_parameter_process_verbosity_standard \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_parameter_process_verbosity_standard\fP(
+    \fBconst uint8_t             \fP\fIright\fP,
+    \fBfll_program_data_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the verbosity from the parameters and then set the verbosity based on the choice.
+.PP
+This is identical to fll_program_parameter_process_verbosity() except it provides the standard choices and modes.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_console_parameter_prioritize_left(). Errors (with error bit) from: f_console_parameter_prioritize_right().
+.SH PARAMETERS
+.TP
+.B right
+If TRUE, use the right-most parameter on conflict. If FALSE, use the left-most parameter on conflict.
+
+.TP
+.B main
+The main program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIfll_program_parameter_process_verbosity()\fP, \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP, \fIf_console_parameter_prioritize_left()\fP, \fIf_console_parameter_prioritize_right()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_copyright.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_copyright.3
new file mode 100644 (file)
index 0000000..bfdc3e9
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fll_program_print_copyright "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_copyright \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_copyright\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIyear_author\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print Featureless Linux Library copyright.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. The print.verbosity is used to determine how much detail is printed (except for when di_detailed_copyright is set).
+
+.TP
+.B year_author
+The year and author to be printed with the copyright symbol line.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_file_code_invalid.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_file_code_invalid.3
new file mode 100644 (file)
index 0000000..fecf5e9
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fll_program_print_error_file_code_invalid "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_file_code_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_program_print_error_file_code_invalid\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when file contains invalid UTF-8 codes.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the file the header is associated with. If name.used is 0 then this is assumed to be the input pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_file_read.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_file_read.3
new file mode 100644 (file)
index 0000000..4d27ae0
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fll_program_print_error_file_read "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_file_read \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_program_print_error_file_read\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message on file read error.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the file the header is associated with. If name.used is 0 then this is assumed to be the input pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_missing_file.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_missing_file.3
new file mode 100644 (file)
index 0000000..d1194e8
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fll_program_print_error_missing_file "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_missing_file \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_missing_file\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message when a file is not provided.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_missing_variable_not_zero.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_missing_variable_not_zero.3
new file mode 100644 (file)
index 0000000..1404b61
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fll_program_print_error_missing_variable_not_zero "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_missing_variable_not_zero \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_missing_variable_not_zero\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message a variable not being defined or the variable has a length is 0.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B variable
+The name of the variable that is not defined or has a length of 0.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_both_specified_same_amount.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_both_specified_same_amount.3
new file mode 100644 (file)
index 0000000..4404927
--- /dev/null
@@ -0,0 +1,186 @@
+.TH fll_program_print_error_parameter_both_specified_same_amount "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_both_specified_same_amount \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_both_specified_same_amount\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about two parameters being required to be specified the same number of times.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol_1
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_2
+The symbol string prepended to the second parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name_1
+The first parameter name.
+
+.TP
+.B name_2
+The second parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_both_specified_same_amount_without.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_both_specified_same_amount_without.3
new file mode 100644 (file)
index 0000000..c323318
--- /dev/null
@@ -0,0 +1,246 @@
+.TH fll_program_print_error_parameter_both_specified_same_amount_without "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_both_specified_same_amount_without \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_both_specified_same_amount_without\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_3\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP,
+    \fBconst f_string_static_t \fP\fIname_3\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about two parameters being required to be specified the same number of times when not specifying the third parameter.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol_1
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_2
+The symbol string prepended to the second parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_3
+The symbol string prepended to the third parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name_1
+The first parameter name.
+
+.TP
+.B name_2
+The second parameter name.
+
+.TP
+.B name_3
+The third parameter name, representing the "without" parameter. The first and second parameter must be specified the same amount of times without this parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with.3
new file mode 100644 (file)
index 0000000..36101be
--- /dev/null
@@ -0,0 +1,186 @@
+.TH fll_program_print_error_parameter_cannot_use_with "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_cannot_use_with \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_cannot_use_with\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about two parameters not being allowed to be used together.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol_1
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_2
+The symbol string prepended to the second parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name_1
+The first parameter name.
+
+.TP
+.B name_2
+The second parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_pipe.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_pipe.3
new file mode 100644 (file)
index 0000000..976dad7
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fll_program_print_error_parameter_cannot_use_with_pipe "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_cannot_use_with_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_cannot_use_with_pipe\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about one parameter not being allowed to be used when processing a pipe.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_without.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_without.3
new file mode 100644 (file)
index 0000000..caf6b73
--- /dev/null
@@ -0,0 +1,246 @@
+.TH fll_program_print_error_parameter_cannot_use_with_without "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_cannot_use_with_without \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_cannot_use_with_without\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_3\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP,
+    \fBconst f_string_static_t \fP\fIname_3\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about two parameters not being allowed to be used together when a third is not used.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol_1
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_2
+The symbol string prepended to the second parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_3
+The symbol string prepended to the second parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name_1
+The first parameter name (the parameter that cannot be used with the second parameter).
+
+.TP
+.B name_2
+The second parameter name.
+
+.TP
+.B name_3
+The third parameter name (the without parameter).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_xor.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_cannot_use_with_xor.3
new file mode 100644 (file)
index 0000000..694f7bd
--- /dev/null
@@ -0,0 +1,248 @@
+.TH fll_program_print_error_parameter_cannot_use_with_xor "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_cannot_use_with_xor \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_cannot_use_with_xor\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_3\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP,
+    \fBconst f_string_static_t \fP\fIname_3\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about two parameters not being allowed to be used together with another specified parameter.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+This represents the parameter that is an exclusive or with the second parameter.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol_1
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_2
+The symbol string prepended to the second parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B symbol_3
+The symbol string prepended to the third parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name_1
+The first parameter name.
+
+.TP
+.B name_2
+The second parameter name.
+
+.TP
+.B name_3
+The second parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_empty_value.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_empty_value.3
new file mode 100644 (file)
index 0000000..0727ffa
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fll_program_print_error_parameter_empty_value "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_empty_value \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_empty_value\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter the parameter value being an empty string.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_first_greater_than_last.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_first_greater_than_last.3
new file mode 100644 (file)
index 0000000..fc16716
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fll_program_print_error_parameter_first_greater_than_last "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_first_greater_than_last \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_first_greater_than_last\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about "first" parameter value being greater than the "last" parameter value.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_less_than.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_less_than.3
new file mode 100644 (file)
index 0000000..ead6d9e
--- /dev/null
@@ -0,0 +1,186 @@
+.TH fll_program_print_error_parameter_integer_less_than "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_integer_less_than \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_integer_less_than\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP,
+    \fBconst f_string_static_t \fP\fIthan\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not being less than the given number.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The value.
+
+.TP
+.B than
+The string representing the number to not be less than.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_more_than.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_more_than.3
new file mode 100644 (file)
index 0000000..2b27e8b
--- /dev/null
@@ -0,0 +1,186 @@
+.TH fll_program_print_error_parameter_integer_more_than "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_integer_more_than \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_integer_more_than\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP,
+    \fBconst f_string_static_t \fP\fIthan\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not being less than the given number.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The value.
+
+.TP
+.B than
+The string representing the number to not be less than.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not.3
new file mode 100644 (file)
index 0000000..684f3f5
--- /dev/null
@@ -0,0 +1,156 @@
+.TH fll_program_print_error_parameter_integer_not "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_integer_not \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_integer_not\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not being a valid integer.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not_negative.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not_negative.3
new file mode 100644 (file)
index 0000000..0ae590e
--- /dev/null
@@ -0,0 +1,156 @@
+.TH fll_program_print_error_parameter_integer_not_negative "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_integer_not_negative \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_integer_not_negative\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not being a negative integer.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not_positive.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_integer_not_positive.3
new file mode 100644 (file)
index 0000000..a32ae56
--- /dev/null
@@ -0,0 +1,156 @@
+.TH fll_program_print_error_parameter_integer_not_positive "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_integer_not_positive \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_integer_not_positive\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not being a positive integer.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_missing_value.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_missing_value.3
new file mode 100644 (file)
index 0000000..9841dd4
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fll_program_print_error_parameter_missing_value "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_missing_value \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_missing_value\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not have the required value associated with this parameter.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_missing_value_requires_amount.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_missing_value_requires_amount.3
new file mode 100644 (file)
index 0000000..51d2605
--- /dev/null
@@ -0,0 +1,156 @@
+.TH fll_program_print_error_parameter_missing_value_requires_amount "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_missing_value_requires_amount \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_missing_value_requires_amount\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIamount\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter not have the required amount of values associated with this parameter.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B amount
+A string representing the amount of missing parameters.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_must_specify_once.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_must_specify_once.3
new file mode 100644 (file)
index 0000000..0a70f1b
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fll_program_print_error_parameter_must_specify_once "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_must_specify_once \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_must_specify_once\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter only being allowed to be used once.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_must_specify_once_value.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_must_specify_once_value.3
new file mode 100644 (file)
index 0000000..4029131
--- /dev/null
@@ -0,0 +1,156 @@
+.TH fll_program_print_error_parameter_must_specify_once_value "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_must_specify_once_value \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_must_specify_once_value\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about a specific value only being allowed to be used once for the parameter.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_process.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_process.3
new file mode 100644 (file)
index 0000000..e68b4db
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fll_program_print_error_parameter_process "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_process \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_process\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about parameter processing failure.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_range_start_before_stop.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_range_start_before_stop.3
new file mode 100644 (file)
index 0000000..e6f1cab
--- /dev/null
@@ -0,0 +1,186 @@
+.TH fll_program_print_error_parameter_range_start_before_stop "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_range_start_before_stop \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_range_start_before_stop\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue_start\fP,
+    \fBconst f_string_static_t \fP\fIvalue_stop\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about a specific value only being allowed to be used once for the parameter.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value_start
+The range start value.
+
+.TP
+.B value_stop
+The range stop value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_support_not.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_support_not.3
new file mode 100644 (file)
index 0000000..2104599
--- /dev/null
@@ -0,0 +1,122 @@
+.TH fll_program_print_error_parameter_support_not "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_support_not \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_support_not\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the parameter is not supported.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_too_few.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_too_few.3
new file mode 100644 (file)
index 0000000..fcea6ea
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fll_program_print_error_parameter_too_few "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_too_few \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_too_few\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fIsymbol\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBconst f_number_unsigned_t \fP\fItimes\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the parameter is specified too few times.
+.PP
+Set to 0 to not print this number.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_few_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B times
+(optional) The number of times that is too few.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_too_many.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_too_many.3
new file mode 100644 (file)
index 0000000..f864c31
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fll_program_print_error_parameter_too_many "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_too_many \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_too_many\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fIsymbol\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBconst f_number_unsigned_t \fP\fItimes\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the parameter is specified too many times.
+.PP
+Set to 0 to not print this number.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_many_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B times
+(optional) The number of times that is too many.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_value_too_long.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_parameter_value_too_long.3
new file mode 100644 (file)
index 0000000..d3c890b
--- /dev/null
@@ -0,0 +1,122 @@
+.TH fll_program_print_error_parameter_value_too_long "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_parameter_value_too_long \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_parameter_value_too_long\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the parameter value is too long.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.TP
+.B symbol
+The symbol string prepended to the parameter. This locks, uses, and unlocks the file stream. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_invalid_form_feed.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_invalid_form_feed.3
new file mode 100644 (file)
index 0000000..b3e3717
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fll_program_print_error_pipe_invalid_form_feed "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_pipe_invalid_form_feed \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_pipe_invalid_form_feed\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about the pipe having an invalid form-feed character '\f' (U+000C).
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_missing_content.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_missing_content.3
new file mode 100644 (file)
index 0000000..6ddab42
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fll_program_print_error_pipe_missing_content "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_pipe_missing_content \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_pipe_missing_content\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about the pipe not having any content.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_object_without_content.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_error_pipe_object_without_content.3
new file mode 100644 (file)
index 0000000..e8f5537
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fll_program_print_error_pipe_object_without_content "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_error_pipe_object_without_content \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_error_pipe_object_without_content\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about the pipe having an Object without Content.
+.PP
+This generally refers to an FSS Object and an FSS Content.
+.PP
+This is only printed when verbosity is not set to quiet.
+.PP
+print.prefix: For the prefixing a string to the message (such as "ERROR:").
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure. This locks, uses, and unlocks the file stream.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_header.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_header.3
new file mode 100644 (file)
index 0000000..227f007
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fll_program_print_help_header "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_header \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_header\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIversion\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help header.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B name
+The name of the program.
+
+.TP
+.B version
+The version number of the program.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_operations.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_operations.3
new file mode 100644 (file)
index 0000000..eb2c5b0
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fll_program_print_help_operations "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_operations \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_operations\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help operations.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option.3
new file mode 100644 (file)
index 0000000..ecf471f
--- /dev/null
@@ -0,0 +1,191 @@
+.TH fll_program_print_help_option "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_option \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_option\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIoption_short\fP,
+    \fBconst f_string_static_t \fP\fIoption_long\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_short\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_long\fP,
+    \fBconst char *const       \fP\fIdescription\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help option.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+Set too NULL to disable.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B option_short
+The short name of the option.
+
+.TP
+.B option_long
+The long name of the option.
+
+.TP
+.B symbol_short
+The short symbol of the option.
+
+.TP
+.B symbol_long
+The long symbol of the option.
+
+.TP
+.B description
+A desciption associated with the option.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_long.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_long.3
new file mode 100644 (file)
index 0000000..0150581
--- /dev/null
@@ -0,0 +1,131 @@
+.TH fll_program_print_help_option_long "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_option_long \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_option_long\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIoption_long\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_long\fP,
+    \fBconst char *const       \fP\fIdescription\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help option (long option only).
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+Set too NULL to disable.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B option_long
+The long name of the option.
+
+.TP
+.B symbol_long
+The long symbol of the option.
+
+.TP
+.B description
+A desciption associated with the option.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_other.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_other.3
new file mode 100644 (file)
index 0000000..aec1e30
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fll_program_print_help_option_other "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_option_other \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_option_other\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIoption_other\fP,
+    \fBconst char *const       \fP\fIdescription\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help option (other option only).
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+Set too NULL to disable.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B option_other
+The other name of the option.
+
+.TP
+.B description
+A desciption associated with the option.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_short.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_short.3
new file mode 100644 (file)
index 0000000..cebcf2f
--- /dev/null
@@ -0,0 +1,131 @@
+.TH fll_program_print_help_option_short "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_option_short \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_option_short\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIoption_short\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_short\fP,
+    \fBconst char *const       \fP\fIdescription\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help option (short option only).
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+Set too NULL to disable.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B option_short
+The short name of the option.
+
+.TP
+.B symbol_short
+The short symbol of the option.
+
+.TP
+.B description
+A desciption associated with the option.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_standard.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_option_standard.3
new file mode 100644 (file)
index 0000000..893f012
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fll_program_print_help_option_standard "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_option_standard \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_option_standard\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print all standard help options.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_special_options.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_special_options.3
new file mode 100644 (file)
index 0000000..04de4b1
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fll_program_print_help_special_options "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_special_options \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_special_options\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help special options.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_usage.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_help_usage.3
new file mode 100644 (file)
index 0000000..0aec6b9
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fll_program_print_help_usage "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_help_usage \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_help_usage\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIparameters\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard help usage.
+.PP
+This print function does not use locking, be sure something like flockfile() and funlockfile() are appropriately called.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B name
+The name of the program.
+
+.TP
+.B parameters
+(optional) The non-option parameters to be displayed inside the brackets. Set the first array value to EOS to disable printing of parameters. Set parameters.used to 0 to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIf_print_dynamic_raw()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_signal_received.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_signal_received.3
new file mode 100644 (file)
index 0000000..99a34d8
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fll_program_print_signal_received "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_signal_received \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_signal_received\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint32_t    \fP\fIsignal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about a process signal being recieved, such as an interrupt signal, as a warning.
+.PP
+This is only printed when verbosity is set to verbose or debug.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This locks, uses, and unlocks the file stream. This requires print.set to be non-NULL.
+
+.TP
+.B signal
+The signal code received.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_print_version.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_print_version.3
new file mode 100644 (file)
index 0000000..1fe628e
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fll_program_print_version "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_print_version \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fll_program_print_version\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIversion\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the program version.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to. This uses but does not lock or unlock file stream. This requires print.set to be non-NULL.
+
+.TP
+.B version
+The version number of the program.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfll_program_print_copyright\fP(3), \fIfll_program_print_error_missing_file\fP(3), \fIfll_program_print_error_missing_variable_not_zero\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount\fP(3), \fIfll_program_print_error_parameter_both_specified_same_amount_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_pipe\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_without\fP(3), \fIfll_program_print_error_parameter_cannot_use_with_xor\fP(3), \fIfll_program_print_error_parameter_empty_value\fP(3), \fIfll_program_print_error_parameter_integer_less_than\fP(3), \fIfll_program_print_error_parameter_integer_more_than\fP(3), \fIfll_program_print_error_parameter_integer_not\fP(3), \fIfll_program_print_error_parameter_integer_not_negative\fP(3), \fIfll_program_print_error_parameter_integer_not_positive\fP(3), \fIfll_program_print_error_parameter_missing_value\fP(3), \fIfll_program_print_error_parameter_missing_value_requires_amount\fP(3), \fIfll_program_print_error_parameter_must_specify_once\fP(3), \fIfll_program_print_error_parameter_must_specify_once_value\fP(3), \fIfll_program_print_error_parameter_process\fP(3), \fIfll_program_print_error_parameter_range_start_before_stop\fP(3), \fIfll_program_print_error_parameter_support_not\fP(3), \fIfll_program_print_error_parameter_too_few\fP(3), \fIfll_program_print_error_parameter_too_many\fP(3), \fIfll_program_print_error_parameter_value_too_long\fP(3), \fIfll_program_print_error_pipe_invalid_form_feed\fP(3), \fIfll_program_print_error_pipe_missing_content\fP(3), \fIfll_program_print_error_pipe_object_without_content\fP(3), \fIfll_program_print_help_header\fP(3), \fIfll_program_print_help_operations\fP(3), \fIfll_program_print_help_option\fP(3), \fIfll_program_print_help_option_long\fP(3), \fIfll_program_print_help_option_other\fP(3), \fIfll_program_print_help_option_short\fP(3), \fIfll_program_print_help_option_standard\fP(3), \fIfll_program_print_help_special_options\fP(3), \fIfll_program_print_help_usage\fP(3), \fIfll_program_print_signal_received\fP(3), \fIfll_program_print_version\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic()\fP, \fIf_print_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_signal_check_loop.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_signal_check_loop.3
new file mode 100644 (file)
index 0000000..ce41fab
--- /dev/null
@@ -0,0 +1,87 @@
+.TH fll_program_signal_check_loop "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_signal_check_loop \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_signal_check_loop\fP(
+    \fBfll_program_data_t *const \fP\fIprogram\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if a signal is received, using a loop..
+.PP
+This checks if program.signal_received is non-zero and if so then it returns TRUE.
+.PP
+There is ideal for use in a non-threaded build. This checks periodically using fll_program_standard_signal_received() and updates program.signal_check as needed.
+.PP
+This alters program.signal_check as needed. This does not alter program.signal_received.
+.PP
+If specified, then this alters state.status, setting it to F_status_set_error(F_interrupt) on interrupt.
+.SH PARAMETERS
+.TP
+.B program
+The program data.
+
+.TP
+.B state
+The state data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on signal received. F_false otherwise (even when program is NULL).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIfll_program_standard_signal_received()\fP, \fIF_status_set_error(F_interrupt)\fP, \fIfll_program_standard_signal_received()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_signal_check_simple.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_signal_check_simple.3
new file mode 100644 (file)
index 0000000..2974406
--- /dev/null
@@ -0,0 +1,85 @@
+.TH fll_program_signal_check_simple "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_signal_check_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_signal_check_simple\fP(
+    \fBfll_program_data_t *const \fP\fIprogram\fP,
+    \fBf_state_t *const          \fP\fIstate\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if a signal is received, using a simple check.
+.PP
+There is ideal for use in a threaded build. The caller should have a thread that assigns the program.signal_received to some non-zero value for this to work.
+.PP
+This does not alter program.signal_check. This does not alter program.signal_received.
+.PP
+If specified, then this alters state.status, setting it to F_status_set_error(F_interrupt) on interrupt.
+.SH PARAMETERS
+.TP
+.B program
+The program data.
+
+.TP
+.B state
+The state data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true on signal received (when program.signal_received is non-zero). F_false otherwise (even when program is NULL).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIF_status_set_error(F_interrupt)\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_standard_set_down.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_standard_set_down.3
new file mode 100644 (file)
index 0000000..da937a6
--- /dev/null
@@ -0,0 +1,80 @@
+.TH fll_program_standard_set_down "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_standard_set_down \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_standard_set_down\fP(
+    \fBfll_program_data_t *const \fP\fIprogram\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This provides a standard program set down operations used by FLL programs.
+.PP
+Closes the signal handler.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_signal_close().
+.SH PARAMETERS
+.TP
+.B program
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_signal_close()\fP, \fIf_file_close()\fP, \fIf_file_flush()\fP, \fIf_file_stream_close()\fP, \fIf_file_stream_flush()\fP, \fIf_signal_close()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_standard_set_up.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_standard_set_up.3
new file mode 100644 (file)
index 0000000..17d3fa7
--- /dev/null
@@ -0,0 +1,80 @@
+.TH fll_program_standard_set_up "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_standard_set_up \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_standard_set_up\fP(
+    \fBfll_program_data_t *const \fP\fIprogram\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This provides a standard program set up operations used by FLL programs.
+.PP
+Handle signals so that program can cleanly exit, de-allocating as appropriate.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_signal_mask(). Errors (with error bit) from: f_signal_open().
+.SH PARAMETERS
+.TP
+.B program
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_signal_mask()\fP, \fIf_signal_open()\fP, \fIf_signal_mask()\fP, \fIf_signal_open()\fP, \fIf_signal_set_add()\fP, \fIf_signal_set_delete()\fP, \fIf_signal_set_empty()\fP, \fIf_signal_set_fill()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_handle.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_handle.3
new file mode 100644 (file)
index 0000000..5f1d8cd
--- /dev/null
@@ -0,0 +1,48 @@
+.TH fll_program_standard_signal_handle "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_standard_signal_handle \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBvoid fll_program_standard_signal_handle\fP(
+    \fBf_state_t *const \fP\fIstate\fP,
+    \fBvoid *const      \fP\fIinternal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Standardized callback for checking for interrupts via the f_state_t interrupt callback.
+.PP
+F_signal_termination
+.PP
+These signals may not be checked if they are not also blocked via the fll_program_data_t.signals variable.
+.PP
+When one of the above signals is both blocked and received, then this calls fll_program_standard_signal_received().
+.PP
+As a callback, this does not perform the standard parameter checking.
+.PP
+When constructing the f_state_t variable, a fll_program_data_t pointer must be passed into the f_state_t.custom variable. This requires the state.custom variable to be of type (fll_program_data_t *). This must not be NULL.
+.PP
+This alters state.status: F_interrupt_not if not interrupted.
+.SH PARAMETERS
+.TP
+.B state
+The state data. This must be of type (f_state_t *).
+
+.TP
+.B internal
+Not used.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_state_t\fP, \fIfll_program_standard_signal_received()\fP, \fIf_state_t\fP, \fIf_state_t.custom\fP, \fIfll_program_standard_signal_received()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_received.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_received.3
new file mode 100644 (file)
index 0000000..31f803f
--- /dev/null
@@ -0,0 +1,86 @@
+.TH fll_program_standard_signal_received "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_standard_signal_received \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_standard_signal_received\fP(
+    \fBfll_program_data_t *const \fP\fIprogram\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if a process signal is received.
+.PP
+Only signals that are blocked via program.signal will be received.
+.PP
+If no signals are blocked, then this always returns F_interrupt_not.
+.PP
+F_signal_termination
+.PP
+signal_status: Stores the status of the signal checking function.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_signal_read().
+.SH PARAMETERS
+.TP
+.B program
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_interrupt on success with interrupt received. F_interrupt_not on success without interrupt received.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_signal_read()\fP, \fIf_signal_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_received_wait.3 b/level_2/fll_program/data/documentation/man/man3/fll_program_standard_signal_received_wait.3
new file mode 100644 (file)
index 0000000..c84ee47
--- /dev/null
@@ -0,0 +1,89 @@
+.TH fll_program_standard_signal_received_wait "3" "January 2026" "FLL - Featureless Linux Library 0.8.0 - Level 2" "Library Functions"
+.SH "NAME"
+fll_program_standard_signal_received_wait \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBf_status_t fll_program_standard_signal_received_wait\fP(
+    \fBfll_program_data_t *const \fP\fIprogram\fP,
+    \fBconst f_number_unsigned_t \fP\fImax\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Check to see if a process signal is received, in a blocking manner.
+.PP
+This will attempt to wait infinitely until a signal is received or enough sequential errors are greater than the given max.
+.PP
+Only signals that are blocked via program.signal will be received.
+.PP
+F_signal_termination
+.PP
+F_maximum (with error bit) if max is reached on too many sequential errors. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_signal_wait().
+.SH PARAMETERS
+.TP
+.B program
+The program data.
+
+.TP
+.B max
+The maximum number of consecutive failures without an interrupt from f_signal_wait() before aborting.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A common program structure to be used by simple programs needing no special structure.
+.PP
+Complex programs or programs that need more data passed via the main should implement their own version of this.
+.PP
+The umask() has design flaws as per specification that requires the umask be changed to read the value! As a work-around, a umask variable is provided here so that umask() only ever need be called once.
+.PP
+The macro macro_fll_program_console_parameter_standard_initialize provides the standard program parameters to include when initializing the parameters variable. The last comma is not provided, the caller should add the comma to macro_fll_program_console_parameter_standard_initialize as necessary.
+.PP
+context: The color context.
+.sp
+.RS
+.nf
+\fB
+struct fll_program_data_t {
+  f_console_parameters_t \fIparameters\fP;
+  const f_string_t      *\fIenvironment\fP;
+  mode_t                 \fIumask\fP;
+  pid_t                  \fIpid\fP;
+  int                    \fIchild\fP;
+  uint8_t                \fIpipe\fP;
+  uint32_t               \fIsignal_received\fP;
+  uint16_t               \fIsignal_check\fP;
+  f_signal_t             \fIsignal\fP;
+  f_status_t             \fIsignal_status\fP;
+  f_file_t               \fIinput\fP;
+  fl_print_t             \fImessage\fP;
+  fl_print_t             \fIoutput\fP;
+  fl_print_t             \fIerror\fP;
+  fl_print_t             \fIwarning\fP;
+  fl_print_t             \fIdebug\fP;
+  f_color_context_t      \fIcontext\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_interrupt on success with interrupt received. F_interrupt_not on success without interrupt received.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfll_program_parameter_additional_append\fP(3), \fIfll_program_parameter_additional_mash\fP(3), \fIfll_program_parameter_additional_rip\fP(3), \fIfll_program_parameter_additional_rip_mash\fP(3), \fIfll_program_parameter_process_context\fP(3), \fIfll_program_parameter_process_context_standard\fP(3), \fIfll_program_parameter_process_empty\fP(3), \fIfll_program_parameter_process_verbosity\fP(3), \fIfll_program_parameter_process_verbosity_standard\fP(3), \fIfll_program_signal_check_loop\fP(3), \fIfll_program_signal_check_simple\fP(3), \fIfll_program_standard_set_down\fP(3), \fIfll_program_standard_set_up\fP(3), \fIfll_program_standard_signal_handle\fP(3), \fIfll_program_standard_signal_received\fP(3), \fIfll_program_standard_signal_received_wait\fP(3), \fIf_signal_wait()\fP, \fIf_signal_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 164cebfa3cf7dcb1a78fa61bb6a52f3c7d85b340..15306501d27a08bcef61aab3b7dd628ccdf6b7cf 100644 (file)
@@ -1,4 +1,4 @@
-.TH BYTE_DUMP "1" "November 2025" "FLL - Byte Dump 0.8.0" "User Commands"
+.TH BYTE_DUMP "1" "January 2026" "FLL - Byte Dump 0.8.0" "User Commands"
 .SH NAME
 byte_dump \- Print bytes of a given file in a more human-friendly format similar to programs like \fBhexdump\fR.
 .SH SYNOPSIS
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_main.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_main.3
new file mode 100644 (file)
index 0000000..bd82cf4
--- /dev/null
@@ -0,0 +1,37 @@
+.TH byte_dump_main "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_main \-
+.SH SYNOPSIS
+.nf
+.B #include <byte_dump.h>
+.sp
+\fBvoid byte_dump_main\fP(
+    \fBbyte_dump_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+F_signal_termination
+.PP
+This alters main.setting.state.status: F_okay on success. F_true on success when performing verification and verify passed. F_false on success when performing verification and verify failed.
+.PP
+F_interrupt (with error bit) on (exit) signal received. F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data and settings.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbyte_dump.h\fP(3), \fIbyte_dump_main\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_main_delete.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_main_delete.3
new file mode 100644 (file)
index 0000000..e92f869
--- /dev/null
@@ -0,0 +1,35 @@
+.TH byte_dump_main_delete "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid byte_dump_main_delete\fP(
+    \fBbyte_dump_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIbyte_dump_main_delete\fP(3), \fIbyte_dump_setting_delete\fP(3), \fIbyte_dump_setting_delete()\fP, \fIfll_program_data_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_character_fragment.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_character_fragment.3
new file mode 100644 (file)
index 0000000..935dc64
--- /dev/null
@@ -0,0 +1,158 @@
+.TH byte_dump_print_character_fragment "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_character_fragment \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t byte_dump_print_character_fragment\fP(
+    \fBfl_print_t *const           \fP\fIprint\fP,
+    \fBconst f_utf_string_static_t \fP\fIsequence\fP,
+    \fBconst f_char_t              \fP\fIinvalid\fP,
+    \fBconst uint8_t               \fP\fIwidth_utf\fP,
+    \fBconst f_char_t              \fP\fIbyte_current\fP,
+    \fBbyte_dump_previous_t       *\fP\fIprevious\fP,
+    \fBbyte_dump_cell_t           *\fP\fIcell\fP,
+    \fBf_char_t                   *\fP\fIoffset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a single character hex code and if the width is reached properly terminate the line.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B sequence
+An array of UTF-8 and ASCII characters.
+
+.TP
+.B invalid
+An array designating if a given character at the array index is invalid or not. The values represent the number of bytes in which the invalid character is expected to take up.
+
+.TP
+.B width_utf
+The number of bytes that the character completely represents. A value of 0 represents ASCII.
+
+.TP
+.B byte_current
+The UTF-8 character byte block to print, going from left to right first byte is 1, second byte is 2, etc... A value of 1 is used for ASCII.
+
+.TP
+.B previous
+The overflow main from the previous line.
+
+.TP
+.B cell
+row: The current row that the character is being printed on. When the max width is reached byte_dump_print_text() is called and this value is incremented.
+
+
+
+.TP
+.B offset
+The offset in which the columns must have applied. Will be reduced to 0 once used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A main structure for character main that overflowed from a previous line.
+.PP
+UTF-8 Characters bytes may overflow beyond the main.width. These overflowed bytes should still have placeholders printed in the next text-mode print.
+.PP
+invalid: The specific invalid value provided representing the overflowed bytes. This is used to print the placeholders.
+.sp
+.RS
+.nf
+\fB
+struct byte_dump_previous_t {
+  uint8_t  \fIbytes\fP;
+  uint8_t  \fIinvalid\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A main structure for character row and column position (cell).
+.PP
+row: The row position associated with the character cell.
+.sp
+.RS
+.nf
+\fB
+struct byte_dump_cell_t {
+  uint8_t  \fIcolumn\fP;
+  uint64_t \fIrow\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true is returned to designate that a reset is needed. F_false is returned to designate that a reset is not needed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIbyte_dump_print_character_fragment\fP(3), \fIbyte_dump_print_file_header\fP(3), \fIbyte_dump_print_text\fP(3), \fIbyte_dump_print_text()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error.3
new file mode 100644 (file)
index 0000000..a0df0a8
--- /dev/null
@@ -0,0 +1,69 @@
+.TH byte_dump_print_error "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t byte_dump_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3), \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_file.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_file.3
new file mode 100644 (file)
index 0000000..0a3e3a6
--- /dev/null
@@ -0,0 +1,132 @@
+.TH byte_dump_print_error_file "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t byte_dump_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_file_none.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_file_none.3
new file mode 100644 (file)
index 0000000..b995def
--- /dev/null
@@ -0,0 +1,64 @@
+.TH byte_dump_print_error_file_none "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_error_file_none \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t byte_dump_print_error_file_none\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when no files are provided.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_parameter_range_out.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_error_parameter_range_out.3
new file mode 100644 (file)
index 0000000..06088d6
--- /dev/null
@@ -0,0 +1,132 @@
+.TH byte_dump_print_error_parameter_range_out "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_error_parameter_range_out \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t byte_dump_print_error_parameter_range_out\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBconst f_number_unsigned_t \fP\fIminimum\fP,
+    \fBconst f_number_unsigned_t \fP\fImaximum\fP,
+    \fBconst f_string_static_t   \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about given value being out of range.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the parameter.
+
+.TP
+.B minimum
+The inclusive non-negative minimum allowed number.
+
+.TP
+.B maximum
+The inclusive non-negative maximum allowed number.
+
+.TP
+.B number
+A string that is supposed to be a valid number within range (but is not).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIbyte_dump_print_error\fP(3), \fIbyte_dump_print_error_file\fP(3), \fIbyte_dump_print_error_file_none\fP(3), \fIbyte_dump_print_error_parameter_range_out\fP(3), \fIfll_program_print_error_file_code_invalid\fP(3), \fIfll_program_print_error_file_read\fP(3), \fIfll_program_print_error_parameter_first_greater_than_last\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_file_header.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_file_header.3
new file mode 100644 (file)
index 0000000..0b752d8
--- /dev/null
@@ -0,0 +1,94 @@
+.TH byte_dump_print_file_header "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_file_header \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t byte_dump_print_file_header\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the text representation alongside the hex display.
+.PP
+This should be called only when text mode is enabled.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B name
+The name of the file the header is associated with. If name.used is 0 then this is assumed to be the input pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIbyte_dump_print_character_fragment\fP(3), \fIbyte_dump_print_file_header\fP(3), \fIbyte_dump_print_text\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_message_help.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_message_help.3
new file mode 100644 (file)
index 0000000..3538edb
--- /dev/null
@@ -0,0 +1,64 @@
+.TH byte_dump_print_message_help "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t byte_dump_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIbyte_dump_print_message_help\fP(3), \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic_raw()\fP, \fIfl_print_format()\fP, \fIfll_program_print_help_header()\fP, \fIfll_program_print_help_option()\fP, \fIfll_program_print_help_option_standard()\fP, \fIfll_program_print_help_usage()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_text.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_print_text.3
new file mode 100644 (file)
index 0000000..de62617
--- /dev/null
@@ -0,0 +1,127 @@
+.TH byte_dump_print_text "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_print_text \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t byte_dump_print_text\fP(
+    \fBfl_print_t *const           \fP\fIprint\fP,
+    \fBconst f_utf_string_static_t \fP\fIsequence\fP,
+    \fBconst f_char_t              \fP\fIinvalid\fP,
+    \fBbyte_dump_previous_t       *\fP\fIprevious\fP,
+    \fBf_char_t                   *\fP\fIoffset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the text representation alongside the hex display.
+.PP
+This should be called only when text mode is enabled.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B sequence
+An array of UTF-8 and ASCII characters.
+
+.TP
+.B invalid
+An array designating if a given character at the array index is invalid or not. The values represent the number of bytes in which the invalid character is expected to take up.
+
+.TP
+.B previous
+The overflow main from the previous line.
+
+.TP
+.B offset
+The offset to apply before printing column cells for the row. Will be reduced to 0 once used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_utf_string_dynamic_t but intended for static-only uses.
+.PP
+The f_utf_string_static_t type should never be directly allocated or de-allocated.
+.PP
+A special macro_f_utf_string_static_t_initialize_1() is provided for the special purpose of easily initialize a static string. A special macro_f_utf_string_static_t_initialize_2() is provided for the special purpose of easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_utf_string_static_t {
+  f_utf_string_t      \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A main structure for character main that overflowed from a previous line.
+.PP
+UTF-8 Characters bytes may overflow beyond the main.width. These overflowed bytes should still have placeholders printed in the next text-mode print.
+.PP
+invalid: The specific invalid value provided representing the overflowed bytes. This is used to print the placeholders.
+.sp
+.RS
+.nf
+\fB
+struct byte_dump_previous_t {
+  uint8_t  \fIbytes\fP;
+  uint8_t  \fIinvalid\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIbyte_dump_print_character_fragment\fP(3), \fIbyte_dump_print_file_header\fP(3), \fIbyte_dump_print_text\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_process_file.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_process_file.3
new file mode 100644 (file)
index 0000000..8bc2de0
--- /dev/null
@@ -0,0 +1,90 @@
+.TH byte_dump_process_file "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_process_file \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid byte_dump_process_file\fP(
+    \fBbyte_dump_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_file_t          \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Dump the contents of the file to standard out.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.TP
+.B name
+The name of the file.
+
+.TP
+.B file
+Data for the file to print. Set to NULL if file is the STDIN pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIbyte_dump_process_file\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_setting_delete.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_setting_delete.3
new file mode 100644 (file)
index 0000000..7aa269b
--- /dev/null
@@ -0,0 +1,62 @@
+.TH byte_dump_setting_delete "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid byte_dump_setting_delete\fP(
+    \fBbyte_dump_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The byte_dump main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+files: An array containing all files to process.
+.sp
+.RS
+.nf
+\fB
+struct byte_dump_setting_t {
+  uint16_t            \fIflag\fP;
+  f_state_t           \fIstate\fP;
+  uint64_t            \fIfirst\fP;
+  uint64_t            \fIlast\fP;
+  uint8_t             \fIwidth\fP;
+  uint8_t             \fImode\fP;
+  uint8_t             \fIpresentation\fP;
+  f_string_dynamics_t \fIfiles\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIbyte_dump_main_delete\fP(3), \fIbyte_dump_setting_delete\fP(3), \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_setting_load.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_setting_load.3
new file mode 100644 (file)
index 0000000..e054763
--- /dev/null
@@ -0,0 +1,66 @@
+.TH byte_dump_setting_load "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid byte_dump_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBbyte_dump_main_t *const     \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: fll_program_parameter_process_context_standard(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data and settings.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIbyte_dump_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_signal_handler.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_signal_handler.3
new file mode 100644 (file)
index 0000000..f8d1e0a
--- /dev/null
@@ -0,0 +1,41 @@
+.TH byte_dump_signal_handler "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid byte_dump_signal_handler\fP(
+    \fBbyte_dump_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIbyte_dump_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/byte_dump/data/documentation/man/man3/byte_dump_thread_signal.3 b/level_3/byte_dump/data/documentation/man/man3/byte_dump_thread_signal.3
new file mode 100644 (file)
index 0000000..1b39da1
--- /dev/null
@@ -0,0 +1,38 @@
+.TH byte_dump_thread_signal "3" "January 2026" "FLL - Byte Dump 0.8.0" "Program Functions"
+.SH "NAME"
+byte_dump_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * byte_dump_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type byte_dump_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIbyte_dump_thread_signal\fP(3), \fIbyte_dump_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIbyte_dump_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 4f4d02c481a0df2a7d3fe4ffb3f5cd636447889b..001addac85a5e5949e232bc4313ef7a495d367e4 100644 (file)
@@ -1,4 +1,4 @@
-.TH EXAMPLE "1" "November 2025" "FLL - Example 0.8.0" "User Commands"
+.TH EXAMPLE "1" "January 2026" "FLL - Example 0.8.0" "User Commands"
 .SH NAME
 example \- A program used for providing an example on how a program might be written for the Featureless Linux Library project.
 .SH SYNOPSIS
index 12cedd1d00b495448aacb7d13d32012459c4a52e..7b746f71ee6f7e706b5d31cc1eeb027631e31a46 100644 (file)
@@ -1,4 +1,4 @@
-.TH FAKE "1" "November 2025" "FLL - Featureless Make 0.8.0" "User Commands"
+.TH FAKE "1" "January 2026" "FLL - Featureless Make 0.8.0" "User Commands"
 .SH NAME
 fake \- Build or compile software similar to GNU Make.
 .SH SYNOPSIS
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_arguments_standard_add.3 b/level_3/fake/data/documentation/man/man3/fake_build_arguments_standard_add.3
new file mode 100644 (file)
index 0000000..995fd42
--- /dev/null
@@ -0,0 +1,128 @@
+.TH fake_build_arguments_standard_add "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_arguments_standard_add \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_arguments_standard_add\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst uint8_t            \fP\fIis_shared\fP,
+    \fBconst uint8_t            \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add the standard arguments for building a library/program.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B is_shared
+Set to TRUE to designate that this is adding for a shared library/program. Set to FALSE to designate that this is adding for a static library/program.
+
+.TP
+.B type
+A build type from the fake_build_type_* enumeration.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIfll_execute_arguments_add()\fP, \fIfll_execute_arguments_add()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_copy.3 b/level_3/fake/data/documentation/man/man3/fake_build_copy.3
new file mode 100644 (file)
index 0000000..849a001
--- /dev/null
@@ -0,0 +1,282 @@
+.TH fake_build_copy "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_copy\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBconst f_mode_t            \fP\fImode\fP,
+    \fBconst f_string_static_t   \fP\fIlabel\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBconst f_string_static_t   \fP\fIdestination\fP,
+    \fBconst f_string_statics_t  \fP\fIfiles\fP,
+    \fBconst f_string_static_t   \fP\fIfile_stage\fP,
+    \fBconst uint8_t             \fP\fIpreserve\fP,
+    \fBconst f_number_unsigned_t \fP\fIoffset\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Copy over the build files.
+.PP
+This modifies data.main.cache_map. This modifies data.main.cache_recurse_do.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Example: 'sources/c/level_0/fss.h' a preserve F_true and an offset of 10 would result in the path of 'level_0/fss.h' being preserved. Whereas when preseve is F_false, then the path used would instead be 'fss.h' (the 'sources/c/level_0/' directories are not preserved).
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B mode
+The modes for each file type.
+
+.TP
+.B label
+A label used when printing the now copying message.
+
+.TP
+.B source
+The specific build path to copy from.
+
+.TP
+.B destination
+The specific build path to copy to.
+
+.TP
+.B files
+The files to copy from source to destination.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.TP
+.B preserve
+Set to F_true to preserve the path and offset is used with the source path to construct the destination path. Set to F_false to only use the file name as the destination.
+
+.TP
+.B offset
+When preserve is F_true, this offset represents the amount of characters at the front of each path to ignore. Everything after the offset is preserved, and directories are created if necessary. The offset must be based on the source string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIf_directory_is()\fP, \fIf_file_copy()\fP, \fIf_file_exists()\fP, \fIf_file_name_base()\fP, \fIf_file_name_directory()\fP, \fIf_memory_array_resize()\fP, \fIf_string_append_nulless()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfl_directory_create()\fP, \fIfl_directory_do()\fP, \fIf_directory_is()\fP, \fIf_file_copy()\fP, \fIf_file_exists()\fP, \fIf_file_name_base()\fP, \fIf_file_name_directory()\fP, \fIf_memory_array_resize()\fP, \fIf_string_append_nulless()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfl_directory_create()\fP, \fIfl_directory_do()\fP, \fIfll_program_print_signal_received()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_data_delete.3 b/level_3/fake/data/documentation/man/man3/fake_build_data_delete.3
new file mode 100644 (file)
index 0000000..26466e0
--- /dev/null
@@ -0,0 +1,54 @@
+.TH fake_build_data_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_data_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_build_data_delete\fP(
+    \fBfake_build_data_t *const \fP\fIbuild_data\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the build data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B build_data
+The build data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_execute_process_script.3 b/level_3/fake/data/documentation/man/man3/fake_build_execute_process_script.3
new file mode 100644 (file)
index 0000000..7a2896d
--- /dev/null
@@ -0,0 +1,183 @@
+.TH fake_build_execute_process_script "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_execute_process_script \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBint fake_build_execute_process_script\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_string_static_t  \fP\fIprocess_script\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute the Pre-Process or Post-pocess build script.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless() Errors (with error bit) from: f_string_dynamic_mash() Errors (with error bit) from: fll_execute_arguments_add() Errors (with error bit) from: fll_execute_arguments_add_parameter_set() Errors (with error bit) from: fll_execute_program()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B process_script
+The setting_data file name fo the appropriate process script. This is expected to be either setting.process_pre or setting.process_post.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_mash()\fP, \fIfll_execute_arguments_add()\fP, \fIfll_execute_arguments_add_parameter_set()\fP, \fIfll_execute_program()\fP, \fIfake_build_touch()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_mash()\fP, \fIfll_execute_arguments_add()\fP, \fIfll_execute_arguments_add_parameter_set()\fP, \fIfll_execute_program()\fP, \fIfake_build_touch()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_get_file_name_without_extension.3 b/level_3/fake/data/documentation/man/man3/fake_build_get_file_name_without_extension.3
new file mode 100644 (file)
index 0000000..5d847f2
--- /dev/null
@@ -0,0 +1,130 @@
+.TH fake_build_get_file_name_without_extension "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_get_file_name_without_extension \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_get_file_name_without_extension\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBconst f_string_static_t   \fP\fIpath\fP,
+    \fBf_string_dynamic_t *const \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the file name without the extension and without the path parts.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B path
+The file path to get the file name from.
+
+.TP
+.B name
+The processed filename.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIf_file_name_base()\fP, \fIf_file_name_base()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_library_script.3 b/level_3/fake/data/documentation/man/man3/fake_build_library_script.3
new file mode 100644 (file)
index 0000000..b0d1f0d
--- /dev/null
@@ -0,0 +1,182 @@
+.TH fake_build_library_script "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_library_script \-
+.SH SYNOPSIS
+.nf
+.B #include <library.h>
+.sp
+\fBint fake_build_library_script\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the script libraries.
+.PP
+If there ever are scripting languages that have a concept of libraries, then this function is here to do the job. None of the built in languages support this so this function does nothing.
+.PP
+One potential use of this function could be to construct a script from pieces, effectively building an "library".
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_file_link() Errors (with error bit) from: fll_execute_arguments_add()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlibrary.h\fP(3), \fIfake_build_library_script\fP(3), \fIfake_build_library_shared\fP(3), \fIfake_build_library_static\fP(3), \fIfake_build_library_static_object\fP(3), \fIf_file_link()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_execute()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_build_touch()\fP, \fIf_file_link()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_execute()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_build_touch()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_library_shared.3 b/level_3/fake/data/documentation/man/man3/fake_build_library_shared.3
new file mode 100644 (file)
index 0000000..c75b9b9
--- /dev/null
@@ -0,0 +1,180 @@
+.TH fake_build_library_shared "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_library_shared \-
+.SH SYNOPSIS
+.nf
+.B #include <library.h>
+.sp
+\fBint fake_build_library_shared\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the shared libraries.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_file_link() Errors (with error bit) from: fll_execute_arguments_add()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlibrary.h\fP(3), \fIfake_build_library_script\fP(3), \fIfake_build_library_shared\fP(3), \fIfake_build_library_static\fP(3), \fIfake_build_library_static_object\fP(3), \fIf_file_link()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_build_touch()\fP, \fIfake_execute()\fP, \fIf_file_link()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_build_touch()\fP, \fIfake_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_library_static.3 b/level_3/fake/data/documentation/man/man3/fake_build_library_static.3
new file mode 100644 (file)
index 0000000..18e6c67
--- /dev/null
@@ -0,0 +1,182 @@
+.TH fake_build_library_static "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_library_static \-
+.SH SYNOPSIS
+.nf
+.B #include <library.h>
+.sp
+\fBint fake_build_library_static\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the static libraries.
+.PP
+This modifies data.main.cache_1. This modifies data.main.cache_2. This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_file_name_directory() Errors (with error bit) from: f_string_dynamic_append_assure() Errors (with error bit) from: f_string_dynamic_prepend() Errors (with error bit) from: fll_execute_arguments_add()
+.PP
+Status codes (with error bit) are returned on any problem.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlibrary.h\fP(3), \fIfake_build_library_script\fP(3), \fIfake_build_library_shared\fP(3), \fIfake_build_library_static\fP(3), \fIfake_build_library_static_object\fP(3), \fIf_file_name_directory()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_prepend()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_get_file_name_without_extension()\fP, \fIfake_build_print_compile_library_static()\fP, \fIfake_build_touch()\fP, \fIfake_execute()\fP, \fIf_file_name_directory()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_prepend()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_get_file_name_without_extension()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_print_compile_library_static()\fP, \fIfake_build_touch()\fP, \fIfake_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_library_static_object.3 b/level_3/fake/data/documentation/man/man3/fake_build_library_static_object.3
new file mode 100644 (file)
index 0000000..fc4eb00
--- /dev/null
@@ -0,0 +1,182 @@
+.TH fake_build_library_static_object "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_library_static_object \-
+.SH SYNOPSIS
+.nf
+.B #include <library.h>
+.sp
+\fBint fake_build_library_static_object\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the static libraries objects.
+.PP
+This modifies data.main.cache_1. This modifies data.main.cache_2. This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_file_name_directory() Errors (with error bit) from: f_string_dynamic_append_assure() Errors (with error bit) from: f_string_dynamic_prepend() Errors (with error bit) from: fl_directory_create() Errors (with error bit) from: fll_execute_arguments_add()
+.PP
+Status codes (with error bit) are returned on any problem.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIlibrary.h\fP(3), \fIfake_build_library_script\fP(3), \fIfake_build_library_shared\fP(3), \fIfake_build_library_static\fP(3), \fIfake_build_library_static_object\fP(3), \fIf_file_name_directory()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_prepend()\fP, \fIfl_directory_create()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_get_file_name_without_extension()\fP, \fIfake_build_print_compile_library_static()\fP, \fIfake_build_touch()\fP, \fIfake_execute()\fP, \fIf_file_name_directory()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_prepend()\fP, \fIfl_directory_create()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_get_file_name_without_extension()\fP, \fIfake_build_print_compile_library_static()\fP, \fIfake_build_touch()\fP, \fIfake_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_load_environment.3 b/level_3/fake/data/documentation/man/man3/fake_build_load_environment.3
new file mode 100644 (file)
index 0000000..c420d6c
--- /dev/null
@@ -0,0 +1,144 @@
+.TH fake_build_load_environment "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_load_environment \-
+.SH SYNOPSIS
+.nf
+.B #include <load.h>
+.sp
+\fBvoid fake_build_load_environment\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBf_string_maps_t *const   \fP\fIenvironment\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the environment used when executing commands.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_array_too_large (with error bit) if the environment variable values are too large.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B environment
+The environment data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload.h\fP(3), \fIfake_build_load_environment\fP(3), \fIfake_build_load_setting\fP(3), \fIfake_build_load_setting_override\fP(3), \fIfake_build_load_setting_process\fP(3), \fIfake_build_load_stage\fP(3), \fIfl_environment_load_name()\fP, \fIfl_environment_load_names()\fP, \fIfl_environment_load_name()\fP, \fIfl_environment_load_names()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_load_setting.3 b/level_3/fake/data/documentation/man/man3/fake_build_load_setting.3
new file mode 100644 (file)
index 0000000..6f2c345
--- /dev/null
@@ -0,0 +1,276 @@
+.TH fake_build_load_setting "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_load_setting \-
+.SH SYNOPSIS
+.nf
+.B #include <load.h>
+.sp
+\fBvoid fake_build_load_setting\fP(
+    \fBfake_data_t *const              \fP\fIdata\fP,
+    \fBconst f_string_statics_t *const \fP\fIbuild_arguments\fP,
+    \fBconst uint8_t                   \fP\fIprocess_pipe\fP,
+    \fBfake_build_setting_t *const     \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Find the build setting file, load it, validate it, and process it.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+F_failure (with error bit) on error.
+.PP
+Errors (with error bit) from: f_fss_apply_delimit(). Errors (with error bit) from: f_string_dynamic_append_assure(). Errors (with error bit) from: fll_fss_extended_read().
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B build_arguments
+(optional) A set of custom arguments to pass to the build. The first argument represents the name of the settings file to use. The second and on arguments represent custom modes to use. If build_arguments is NULL, then the default (or program supplied) settings file and modes are used. If build_arguments.used is 0, then the default or program parameter supplied file is used. Set the first argument used length to 0 to use the default program parameter supplied file. Set the second argument used length to 0 without any further arguments to not use any modes.
+
+.TP
+.B process_pipe
+If TRUE, then use the program input pipe. If FALSE, then ignore the program input pipe.
+
+.TP
+.B setting
+All build related setting data from the build setting file are loaded into this. These setting will have any specified mode property applied.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Build settings data.
+.PP
+modes_default: The modes_default setting.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_setting_t {
+  uint8_t             \fIflag\fP;
+  uint8_t             \fIlanguage\fP;
+  uint8_t             \fIversion_file\fP;
+  uint8_t             \fIversion_target\fP;
+  uint8_t             \fIbuild_script\fP;
+  uint8_t             \fIbuild_shared\fP;
+  uint8_t             \fIbuild_static\fP;
+  uint8_t             \fIhas_path_standard\fP;
+  uint8_t             \fIpreserve_path_headers\fP;
+  uint8_t             \fIsearch_exclusive\fP;
+  uint8_t             \fIsearch_shared\fP;
+  uint8_t             \fIsearch_static\fP;
+  f_string_dynamic_t  \fIbuild_compiler\fP;
+  f_string_dynamic_t  \fIbuild_indexer\fP;
+  f_string_dynamic_t  \fIbuild_language\fP;
+  f_string_dynamic_t  \fIbuild_language_path\fP;
+  f_string_dynamic_t  \fIbuild_name\fP;
+  f_string_dynamic_t  \fIbuild_name_library\fP;
+  f_string_dynamic_t  \fIbuild_name_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_static\fP;
+  f_string_dynamic_t  \fIbuild_name_program\fP;
+  f_string_dynamic_t  \fIbuild_name_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_script\fP;
+  f_string_dynamic_t  \fIpath_headers\fP;
+  f_string_dynamic_t  \fIpath_language\fP;
+  f_string_dynamic_t  \fIpath_library_script\fP;
+  f_string_dynamic_t  \fIpath_library_shared\fP;
+  f_string_dynamic_t  \fIpath_library_static\fP;
+  f_string_dynamic_t  \fIpath_object_script\fP;
+  f_string_dynamic_t  \fIpath_object_shared\fP;
+  f_string_dynamic_t  \fIpath_object_static\fP;
+  f_string_dynamic_t  \fIpath_program_script\fP;
+  f_string_dynamic_t  \fIpath_program_shared\fP;
+  f_string_dynamic_t  \fIpath_program_static\fP;
+  f_string_dynamic_t  \fIpath_sources\fP;
+  f_string_dynamic_t  \fIpath_sources_headers\fP;
+  f_string_dynamic_t  \fIpath_sources_library\fP;
+  f_string_dynamic_t  \fIpath_sources_object\fP;
+  f_string_dynamic_t  \fIpath_sources_program\fP;
+  f_string_dynamic_t  \fIpath_sources_script\fP;
+  f_string_dynamic_t  \fIprocess_post\fP;
+  f_string_dynamic_t  \fIprocess_pre\fP;
+  f_string_dynamic_t  \fIstage\fP;
+  f_string_dynamic_t  \fIversion_major\fP;
+  f_string_dynamic_t  \fIversion_major_prefix\fP;
+  f_string_dynamic_t  \fIversion_micro\fP;
+  f_string_dynamic_t  \fIversion_micro_prefix\fP;
+  f_string_dynamic_t  \fIversion_minor\fP;
+  f_string_dynamic_t  \fIversion_minor_prefix\fP;
+  f_string_dynamic_t  \fIversion_nano\fP;
+  f_string_dynamic_t  \fIversion_nano_prefix\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_static\fP;
+  f_string_dynamics_t \fIbuild_indexer_arguments\fP;
+  f_string_dynamics_t \fIbuild_libraries\fP;
+  f_string_dynamics_t \fIbuild_libraries_shared\fP;
+  f_string_dynamics_t \fIbuild_libraries_static\fP;
+  f_string_dynamics_t \fIbuild_objects_library\fP;
+  f_string_dynamics_t \fIbuild_objects_library_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_library_static\fP;
+  f_string_dynamics_t \fIbuild_objects_program\fP;
+  f_string_dynamics_t \fIbuild_objects_program_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_documentation\fP;
+  f_string_dynamics_t \fIbuild_sources_headers\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_static\fP;
+  f_string_dynamics_t \fIbuild_sources_library\fP;
+  f_string_dynamics_t \fIbuild_sources_library_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_library_static\fP;
+  f_string_dynamics_t \fIbuild_sources_object\fP;
+  f_string_dynamics_t \fIbuild_sources_object_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_object_static\fP;
+  f_string_dynamics_t \fIbuild_sources_program\fP;
+  f_string_dynamics_t \fIbuild_sources_program_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_script\fP;
+  f_string_dynamics_t \fIbuild_sources_setting\fP;
+  f_string_dynamics_t \fIdefines\fP;
+  f_string_dynamics_t \fIdefines_library\fP;
+  f_string_dynamics_t \fIdefines_library_shared\fP;
+  f_string_dynamics_t \fIdefines_library_static\fP;
+  f_string_dynamics_t \fIdefines_object\fP;
+  f_string_dynamics_t \fIdefines_object_shared\fP;
+  f_string_dynamics_t \fIdefines_object_static\fP;
+  f_string_dynamics_t \fIdefines_program\fP;
+  f_string_dynamics_t \fIdefines_program_shared\fP;
+  f_string_dynamics_t \fIdefines_program_static\fP;
+  f_string_dynamics_t \fIdefines_shared\fP;
+  f_string_dynamics_t \fIdefines_static\fP;
+  f_string_dynamics_t \fIenvironment\fP;
+  f_string_dynamics_t \fIflags\fP;
+  f_string_dynamics_t \fIflags_library\fP;
+  f_string_dynamics_t \fIflags_library_shared\fP;
+  f_string_dynamics_t \fIflags_library_static\fP;
+  f_string_dynamics_t \fIflags_object\fP;
+  f_string_dynamics_t \fIflags_object_shared\fP;
+  f_string_dynamics_t \fIflags_object_static\fP;
+  f_string_dynamics_t \fIflags_program\fP;
+  f_string_dynamics_t \fIflags_program_shared\fP;
+  f_string_dynamics_t \fIflags_program_static\fP;
+  f_string_dynamics_t \fIflags_shared\fP;
+  f_string_dynamics_t \fIflags_static\fP;
+  f_string_dynamics_t \fImodes\fP;
+  f_string_dynamics_t \fImodes_default\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload.h\fP(3), \fIfake_build_load_environment\fP(3), \fIfake_build_load_setting\fP(3), \fIfake_build_load_setting_override\fP(3), \fIfake_build_load_setting_process\fP(3), \fIfake_build_load_stage\fP(3), \fIf_fss_apply_delimit()\fP, \fIf_string_dynamic_append_assure()\fP, \fIfll_fss_extended_read()\fP, \fIfake_build_load_setting_override()\fP, \fIfake_build_load_setting_process()\fP, \fIfake_file_buffer()\fP, \fIfake_pipe_buffer()\fP, \fIf_fss_apply_delimit()\fP, \fIf_string_dynamic_append_assure()\fP, \fIfll_fss_extended_read()\fP, \fIfll_program_print_signal_received()\fP, \fIfake_build_load_setting_override()\fP, \fIfake_build_load_setting_process()\fP, \fIfake_file_buffer()\fP, \fIfake_pipe_buffer()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_load_setting_override.3 b/level_3/fake/data/documentation/man/man3/fake_build_load_setting_override.3
new file mode 100644 (file)
index 0000000..24d4644
--- /dev/null
@@ -0,0 +1,243 @@
+.TH fake_build_load_setting_override "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_load_setting_override \-
+.SH SYNOPSIS
+.nf
+.B #include <load.h>
+.sp
+\fBvoid fake_build_load_setting_override\fP(
+    \fBfake_data_t *const          \fP\fIdata\fP,
+    \fBfake_build_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Override build settings based on command line arguments.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on error.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B setting
+All build related setting data from the build setting file are loaded into this. These setting will have any specified mode property applied.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Build settings data.
+.PP
+modes_default: The modes_default setting.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_setting_t {
+  uint8_t             \fIflag\fP;
+  uint8_t             \fIlanguage\fP;
+  uint8_t             \fIversion_file\fP;
+  uint8_t             \fIversion_target\fP;
+  uint8_t             \fIbuild_script\fP;
+  uint8_t             \fIbuild_shared\fP;
+  uint8_t             \fIbuild_static\fP;
+  uint8_t             \fIhas_path_standard\fP;
+  uint8_t             \fIpreserve_path_headers\fP;
+  uint8_t             \fIsearch_exclusive\fP;
+  uint8_t             \fIsearch_shared\fP;
+  uint8_t             \fIsearch_static\fP;
+  f_string_dynamic_t  \fIbuild_compiler\fP;
+  f_string_dynamic_t  \fIbuild_indexer\fP;
+  f_string_dynamic_t  \fIbuild_language\fP;
+  f_string_dynamic_t  \fIbuild_language_path\fP;
+  f_string_dynamic_t  \fIbuild_name\fP;
+  f_string_dynamic_t  \fIbuild_name_library\fP;
+  f_string_dynamic_t  \fIbuild_name_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_static\fP;
+  f_string_dynamic_t  \fIbuild_name_program\fP;
+  f_string_dynamic_t  \fIbuild_name_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_script\fP;
+  f_string_dynamic_t  \fIpath_headers\fP;
+  f_string_dynamic_t  \fIpath_language\fP;
+  f_string_dynamic_t  \fIpath_library_script\fP;
+  f_string_dynamic_t  \fIpath_library_shared\fP;
+  f_string_dynamic_t  \fIpath_library_static\fP;
+  f_string_dynamic_t  \fIpath_object_script\fP;
+  f_string_dynamic_t  \fIpath_object_shared\fP;
+  f_string_dynamic_t  \fIpath_object_static\fP;
+  f_string_dynamic_t  \fIpath_program_script\fP;
+  f_string_dynamic_t  \fIpath_program_shared\fP;
+  f_string_dynamic_t  \fIpath_program_static\fP;
+  f_string_dynamic_t  \fIpath_sources\fP;
+  f_string_dynamic_t  \fIpath_sources_headers\fP;
+  f_string_dynamic_t  \fIpath_sources_library\fP;
+  f_string_dynamic_t  \fIpath_sources_object\fP;
+  f_string_dynamic_t  \fIpath_sources_program\fP;
+  f_string_dynamic_t  \fIpath_sources_script\fP;
+  f_string_dynamic_t  \fIprocess_post\fP;
+  f_string_dynamic_t  \fIprocess_pre\fP;
+  f_string_dynamic_t  \fIstage\fP;
+  f_string_dynamic_t  \fIversion_major\fP;
+  f_string_dynamic_t  \fIversion_major_prefix\fP;
+  f_string_dynamic_t  \fIversion_micro\fP;
+  f_string_dynamic_t  \fIversion_micro_prefix\fP;
+  f_string_dynamic_t  \fIversion_minor\fP;
+  f_string_dynamic_t  \fIversion_minor_prefix\fP;
+  f_string_dynamic_t  \fIversion_nano\fP;
+  f_string_dynamic_t  \fIversion_nano_prefix\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_static\fP;
+  f_string_dynamics_t \fIbuild_indexer_arguments\fP;
+  f_string_dynamics_t \fIbuild_libraries\fP;
+  f_string_dynamics_t \fIbuild_libraries_shared\fP;
+  f_string_dynamics_t \fIbuild_libraries_static\fP;
+  f_string_dynamics_t \fIbuild_objects_library\fP;
+  f_string_dynamics_t \fIbuild_objects_library_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_library_static\fP;
+  f_string_dynamics_t \fIbuild_objects_program\fP;
+  f_string_dynamics_t \fIbuild_objects_program_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_documentation\fP;
+  f_string_dynamics_t \fIbuild_sources_headers\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_static\fP;
+  f_string_dynamics_t \fIbuild_sources_library\fP;
+  f_string_dynamics_t \fIbuild_sources_library_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_library_static\fP;
+  f_string_dynamics_t \fIbuild_sources_object\fP;
+  f_string_dynamics_t \fIbuild_sources_object_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_object_static\fP;
+  f_string_dynamics_t \fIbuild_sources_program\fP;
+  f_string_dynamics_t \fIbuild_sources_program_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_script\fP;
+  f_string_dynamics_t \fIbuild_sources_setting\fP;
+  f_string_dynamics_t \fIdefines\fP;
+  f_string_dynamics_t \fIdefines_library\fP;
+  f_string_dynamics_t \fIdefines_library_shared\fP;
+  f_string_dynamics_t \fIdefines_library_static\fP;
+  f_string_dynamics_t \fIdefines_object\fP;
+  f_string_dynamics_t \fIdefines_object_shared\fP;
+  f_string_dynamics_t \fIdefines_object_static\fP;
+  f_string_dynamics_t \fIdefines_program\fP;
+  f_string_dynamics_t \fIdefines_program_shared\fP;
+  f_string_dynamics_t \fIdefines_program_static\fP;
+  f_string_dynamics_t \fIdefines_shared\fP;
+  f_string_dynamics_t \fIdefines_static\fP;
+  f_string_dynamics_t \fIenvironment\fP;
+  f_string_dynamics_t \fIflags\fP;
+  f_string_dynamics_t \fIflags_library\fP;
+  f_string_dynamics_t \fIflags_library_shared\fP;
+  f_string_dynamics_t \fIflags_library_static\fP;
+  f_string_dynamics_t \fIflags_object\fP;
+  f_string_dynamics_t \fIflags_object_shared\fP;
+  f_string_dynamics_t \fIflags_object_static\fP;
+  f_string_dynamics_t \fIflags_program\fP;
+  f_string_dynamics_t \fIflags_program_shared\fP;
+  f_string_dynamics_t \fIflags_program_static\fP;
+  f_string_dynamics_t \fIflags_shared\fP;
+  f_string_dynamics_t \fIflags_static\fP;
+  f_string_dynamics_t \fImodes\fP;
+  f_string_dynamics_t \fImodes_default\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload.h\fP(3), \fIfake_build_load_environment\fP(3), \fIfake_build_load_setting\fP(3), \fIfake_build_load_setting_override\fP(3), \fIfake_build_load_setting_process\fP(3), \fIfake_build_load_stage\fP(3), \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_assure()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_load_setting_process.3 b/level_3/fake/data/documentation/man/man3/fake_build_load_setting_process.3
new file mode 100644 (file)
index 0000000..5e7c161
--- /dev/null
@@ -0,0 +1,382 @@
+.TH fake_build_load_setting_process "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_load_setting_process \-
+.SH SYNOPSIS
+.nf
+.B #include <load.h>
+.sp
+\fBvoid fake_build_load_setting_process\fP(
+    \fBfake_data_t *const              \fP\fIdata\fP,
+    \fBconst uint8_t                   \fP\fIchecks\fP,
+    \fBconst f_string_static_t         \fP\fIpath_file\fP,
+    \fBconst f_string_statics_t *const \fP\fImodes_custom\fP,
+    \fBconst f_string_static_t         \fP\fIbuffer\fP,
+    \fBconst f_ranges_t                \fP\fIobjects\fP,
+    \fBconst f_rangess_t               \fP\fIcontents\fP,
+    \fBfake_build_setting_t *const     \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load and process the setting buffer.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+F_failure (with error bit) on error.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B checks
+If TRUE, perform certain "required" sanity checks. If FALSE, do not perform certain "required" sanity checks (intended for a fakefile rather than a build settings file).
+
+.TP
+.B path_file
+The path to the buffer.
+
+.TP
+.B modes_custom
+(optional) When not NULL, specifies custom modes to use rather than what is provided. This also overrides command line parameters that specify the mode.
+
+.TP
+.B buffer
+The loaded file data.
+
+.TP
+.B objects
+The object mapping.
+
+.TP
+.B contents
+The content mapping.
+
+.TP
+.B setting
+All build related setting data from the build setting file are loaded into this. These setting will have any specified mode property applied.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an array of f_ranges_t.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_rangess_t {
+  f_ranges_t         *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Build settings data.
+.PP
+modes_default: The modes_default setting.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_setting_t {
+  uint8_t             \fIflag\fP;
+  uint8_t             \fIlanguage\fP;
+  uint8_t             \fIversion_file\fP;
+  uint8_t             \fIversion_target\fP;
+  uint8_t             \fIbuild_script\fP;
+  uint8_t             \fIbuild_shared\fP;
+  uint8_t             \fIbuild_static\fP;
+  uint8_t             \fIhas_path_standard\fP;
+  uint8_t             \fIpreserve_path_headers\fP;
+  uint8_t             \fIsearch_exclusive\fP;
+  uint8_t             \fIsearch_shared\fP;
+  uint8_t             \fIsearch_static\fP;
+  f_string_dynamic_t  \fIbuild_compiler\fP;
+  f_string_dynamic_t  \fIbuild_indexer\fP;
+  f_string_dynamic_t  \fIbuild_language\fP;
+  f_string_dynamic_t  \fIbuild_language_path\fP;
+  f_string_dynamic_t  \fIbuild_name\fP;
+  f_string_dynamic_t  \fIbuild_name_library\fP;
+  f_string_dynamic_t  \fIbuild_name_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_static\fP;
+  f_string_dynamic_t  \fIbuild_name_program\fP;
+  f_string_dynamic_t  \fIbuild_name_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_script\fP;
+  f_string_dynamic_t  \fIpath_headers\fP;
+  f_string_dynamic_t  \fIpath_language\fP;
+  f_string_dynamic_t  \fIpath_library_script\fP;
+  f_string_dynamic_t  \fIpath_library_shared\fP;
+  f_string_dynamic_t  \fIpath_library_static\fP;
+  f_string_dynamic_t  \fIpath_object_script\fP;
+  f_string_dynamic_t  \fIpath_object_shared\fP;
+  f_string_dynamic_t  \fIpath_object_static\fP;
+  f_string_dynamic_t  \fIpath_program_script\fP;
+  f_string_dynamic_t  \fIpath_program_shared\fP;
+  f_string_dynamic_t  \fIpath_program_static\fP;
+  f_string_dynamic_t  \fIpath_sources\fP;
+  f_string_dynamic_t  \fIpath_sources_headers\fP;
+  f_string_dynamic_t  \fIpath_sources_library\fP;
+  f_string_dynamic_t  \fIpath_sources_object\fP;
+  f_string_dynamic_t  \fIpath_sources_program\fP;
+  f_string_dynamic_t  \fIpath_sources_script\fP;
+  f_string_dynamic_t  \fIprocess_post\fP;
+  f_string_dynamic_t  \fIprocess_pre\fP;
+  f_string_dynamic_t  \fIstage\fP;
+  f_string_dynamic_t  \fIversion_major\fP;
+  f_string_dynamic_t  \fIversion_major_prefix\fP;
+  f_string_dynamic_t  \fIversion_micro\fP;
+  f_string_dynamic_t  \fIversion_micro_prefix\fP;
+  f_string_dynamic_t  \fIversion_minor\fP;
+  f_string_dynamic_t  \fIversion_minor_prefix\fP;
+  f_string_dynamic_t  \fIversion_nano\fP;
+  f_string_dynamic_t  \fIversion_nano_prefix\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_static\fP;
+  f_string_dynamics_t \fIbuild_indexer_arguments\fP;
+  f_string_dynamics_t \fIbuild_libraries\fP;
+  f_string_dynamics_t \fIbuild_libraries_shared\fP;
+  f_string_dynamics_t \fIbuild_libraries_static\fP;
+  f_string_dynamics_t \fIbuild_objects_library\fP;
+  f_string_dynamics_t \fIbuild_objects_library_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_library_static\fP;
+  f_string_dynamics_t \fIbuild_objects_program\fP;
+  f_string_dynamics_t \fIbuild_objects_program_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_documentation\fP;
+  f_string_dynamics_t \fIbuild_sources_headers\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_static\fP;
+  f_string_dynamics_t \fIbuild_sources_library\fP;
+  f_string_dynamics_t \fIbuild_sources_library_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_library_static\fP;
+  f_string_dynamics_t \fIbuild_sources_object\fP;
+  f_string_dynamics_t \fIbuild_sources_object_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_object_static\fP;
+  f_string_dynamics_t \fIbuild_sources_program\fP;
+  f_string_dynamics_t \fIbuild_sources_program_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_script\fP;
+  f_string_dynamics_t \fIbuild_sources_setting\fP;
+  f_string_dynamics_t \fIdefines\fP;
+  f_string_dynamics_t \fIdefines_library\fP;
+  f_string_dynamics_t \fIdefines_library_shared\fP;
+  f_string_dynamics_t \fIdefines_library_static\fP;
+  f_string_dynamics_t \fIdefines_object\fP;
+  f_string_dynamics_t \fIdefines_object_shared\fP;
+  f_string_dynamics_t \fIdefines_object_static\fP;
+  f_string_dynamics_t \fIdefines_program\fP;
+  f_string_dynamics_t \fIdefines_program_shared\fP;
+  f_string_dynamics_t \fIdefines_program_static\fP;
+  f_string_dynamics_t \fIdefines_shared\fP;
+  f_string_dynamics_t \fIdefines_static\fP;
+  f_string_dynamics_t \fIenvironment\fP;
+  f_string_dynamics_t \fIflags\fP;
+  f_string_dynamics_t \fIflags_library\fP;
+  f_string_dynamics_t \fIflags_library_shared\fP;
+  f_string_dynamics_t \fIflags_library_static\fP;
+  f_string_dynamics_t \fIflags_object\fP;
+  f_string_dynamics_t \fIflags_object_shared\fP;
+  f_string_dynamics_t \fIflags_object_static\fP;
+  f_string_dynamics_t \fIflags_program\fP;
+  f_string_dynamics_t \fIflags_program_shared\fP;
+  f_string_dynamics_t \fIflags_program_static\fP;
+  f_string_dynamics_t \fIflags_shared\fP;
+  f_string_dynamics_t \fIflags_static\fP;
+  f_string_dynamics_t \fImodes\fP;
+  f_string_dynamics_t \fImodes_default\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload.h\fP(3), \fIfake_build_load_environment\fP(3), \fIfake_build_load_setting\fP(3), \fIfake_build_load_setting_override\fP(3), \fIfake_build_load_setting_process\fP(3), \fIfake_build_load_stage\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_path_directory_cleanup()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfll_fss_snatch_apart()\fP, \fIf_memory_array_increase_by()\fP, \fIf_path_directory_cleanup()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfll_fss_snatch_apart()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_load_stage.3 b/level_3/fake/data/documentation/man/man3/fake_build_load_stage.3
new file mode 100644 (file)
index 0000000..bde3233
--- /dev/null
@@ -0,0 +1,219 @@
+.TH fake_build_load_stage "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_load_stage \-
+.SH SYNOPSIS
+.nf
+.B #include <load.h>
+.sp
+\fBvoid fake_build_load_stage\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBfake_build_data_t *const  \fP\fIdata_build\fP,
+    \fBconst f_string_static_t   \fP\fIfakefile_stage\fP,
+    \fBconst f_string_static_t   \fP\fIsettings_file\fP,
+    \fBfake_build_stage_t *const \fP\fIstage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the stage file paths.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B fakefile_stage
+(optional) The stage setting value from the fakefile.
+
+.TP
+.B settings_file
+The path to the settings file.
+
+.TP
+.B stage
+All stage file paths.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build stage data.
+.PP
+file_sources_settings: The setting source files.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_stage_t {
+  f_string_dynamic_t \fIfile_library_script\fP;
+  f_string_dynamic_t \fIfile_library_shared\fP;
+  f_string_dynamic_t \fIfile_library_static\fP;
+  f_string_dynamic_t \fIfile_library_static_object\fP;
+  f_string_dynamic_t \fIfile_object_script\fP;
+  f_string_dynamic_t \fIfile_object_shared\fP;
+  f_string_dynamic_t \fIfile_object_static\fP;
+  f_string_dynamic_t \fIfile_objects_static\fP;
+  f_string_dynamic_t \fIfile_process_post\fP;
+  f_string_dynamic_t \fIfile_process_pre\fP;
+  f_string_dynamic_t \fIfile_program_script\fP;
+  f_string_dynamic_t \fIfile_program_shared\fP;
+  f_string_dynamic_t \fIfile_program_static\fP;
+  f_string_dynamic_t \fIfile_skeleton\fP;
+  f_string_dynamic_t \fIfile_sources_documentation\fP;
+  f_string_dynamic_t \fIfile_sources_headers\fP;
+  f_string_dynamic_t \fIfile_sources_script\fP;
+  f_string_dynamic_t \fIfile_sources_settings\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload.h\fP(3), \fIfake_build_load_environment\fP(3), \fIfake_build_load_setting\fP(3), \fIfake_build_load_setting_override\fP(3), \fIfake_build_load_setting_process\fP(3), \fIfake_build_load_stage\fP(3), \fIf_file_name_base()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_file_name_base()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfll_program_print_signal_received()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_object.3 b/level_3/fake/data/documentation/man/man3/fake_build_object.3
new file mode 100644 (file)
index 0000000..297b310
--- /dev/null
@@ -0,0 +1,187 @@
+.TH fake_build_object "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_object \-
+.SH SYNOPSIS
+.nf
+.B #include <object.h>
+.sp
+\fBint fake_build_object\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP,
+    \fBconst uint8_t            \fP\fIshared\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the shared or static objects.
+.PP
+Object files can be compiled differently between shared and static such that a shared object might be compiled with -fPIC and a static object might not be. This represents an object being compiled with the intent to be used in a library or program.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: fl_directory_create(). Errors (with error bit) from: fll_execute_arguments_add().
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.TP
+.B shared
+If F_true, then build a shared object. Otherwise, build a static object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIobject.h\fP(3), \fIfake_build_object\fP(3), \fIfake_build_object_script\fP(3), \fIfl_directory_create()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_sources_object_add()\fP, \fIfake_execute()\fP, \fIfl_directory_create()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_sources_object_add()\fP, \fIfake_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_object_script.3 b/level_3/fake/data/documentation/man/man3/fake_build_object_script.3
new file mode 100644 (file)
index 0000000..736a57e
--- /dev/null
@@ -0,0 +1,180 @@
+.TH fake_build_object_script "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_object_script \-
+.SH SYNOPSIS
+.nf
+.B #include <object.h>
+.sp
+\fBint fake_build_object_script\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the script objects.
+.PP
+If there ever are scripting languages that have a concept of objects, then this function is here to do the job. None of the built in languages support this so this function does nothing.
+.PP
+One potential use of this function could be to construct a script from pieces, effectively building an "object".
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIobject.h\fP(3), \fIfake_build_object\fP(3), \fIfake_build_object_script\fP(3), \fIfake_build_touch()\fP, \fIfake_build_touch()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_objects_add.3 b/level_3/fake/data/documentation/man/man3/fake_build_objects_add.3
new file mode 100644 (file)
index 0000000..0a3fffd
--- /dev/null
@@ -0,0 +1,198 @@
+.TH fake_build_objects_add "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_objects_add \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_objects_add\fP(
+    \fBfake_data_t *const              \fP\fIdata\fP,
+    \fBfake_build_data_t *const        \fP\fIdata_build\fP,
+    \fBconst f_string_static_t *const  \fP\fIpath\fP,
+    \fBconst f_string_statics_t *const \fP\fIgeneric\fP,
+    \fBconst f_string_statics_t *const \fP\fIspecific\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add the pre-compiled objects to the execute arguments array (such as "build_objects_library").
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B path
+The sub-path to find the object files within.
+
+.TP
+.B generic
+The generic sources to add.
+
+.TP
+.B specific
+The specific sources to add.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIfll_execute_arguments_add()\fP, \fIfll_execute_arguments_add()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_operate.3 b/level_3/fake/data/documentation/man/man3/fake_build_operate.3
new file mode 100644 (file)
index 0000000..412b719
--- /dev/null
@@ -0,0 +1,158 @@
+.TH fake_build_operate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_operate \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_operate\fP(
+    \fBfake_data_t *const              \fP\fIdata\fP,
+    \fBconst f_string_statics_t *const \fP\fIbuild_arguments\fP,
+    \fBconst uint8_t                   \fP\fIprocess_pipe\fP,
+    \fBconst f_string_static_t         \fP\fIfakefile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute the build operation.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: fll_program_print_signal_received()
+.PP
+Set fakefile_stage.used to 0 to not use.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B build_arguments
+(optional) A set of custom arguments to pass to the build. The first argument represents the name of the settings file to use. The second and on arguments represent custom modes to use. If build_arguments is NULL, then the default (or program supplied) settings file and modes are used. If build_arguments.used is 0, then the default or program parameter supplied file is used. Set the first argument used length to 0 to use the default program parameter supplied file. Set the second argument used length to 0 without any further arguments to not use any modes.
+
+.TP
+.B process_pipe
+If TRUE, then use the program input pipe. If FALSE, then ignore the program input pipe.
+
+.TP
+.B fakefile_stage
+(optional) The stage setting value from the fakefile.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIfll_program_print_signal_received()\fP, \fIfake_build_copy()\fP, \fIfake_build_execute_process_script()\fP, \fIfake_build_library_script()\fP, \fIfake_build_library_shared()\fP, \fIfake_build_library_static()\fP, \fIfake_build_load_environment()\fP, \fIfake_build_load_setting()\fP, \fIfake_build_load_stage()\fP, \fIfake_build_object_script()\fP, \fIfake_build_program_script()\fP, \fIfake_build_program_shared()\fP, \fIfake_build_program_static()\fP, \fIfake_build_library_static_object()\fP, \fIfake_build_skeleton()\fP, \fIfll_program_print_signal_received()\fP, \fIfake_build_copy()\fP, \fIfake_build_execute_process_script()\fP, \fIfake_build_library_script()\fP, \fIfake_build_library_shared()\fP, \fIfake_build_library_static()\fP, \fIfake_build_load_environment()\fP, \fIfake_build_load_setting()\fP, \fIfake_build_load_stage()\fP, \fIfake_build_object()\fP, \fIfake_build_object_script()\fP, \fIfake_build_program_object_static()\fP, \fIfake_build_program_script()\fP, \fIfake_build_program_shared()\fP, \fIfake_build_program_static()\fP, \fIfake_build_skeleton()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_path_source_string.3 b/level_3/fake/data/documentation/man/man3/fake_build_path_source_string.3
new file mode 100644 (file)
index 0000000..674a024
--- /dev/null
@@ -0,0 +1,155 @@
+.TH fake_build_path_source_string "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_path_source_string \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_path_source_string\fP(
+    \fBfake_data_t *const             \fP\fIdata\fP,
+    \fBfake_build_data_t *const       \fP\fIdata_build\fP,
+    \fBconst f_string_static_t *const \fP\fIsetting_path_source\fP,
+    \fBf_string_dynamic_t *const      \fP\fIsource\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Construct a static string array of the sources path.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B setting_path_source
+The source path from the build settings file.
+
+.TP
+.B source
+The source string to append the build path source to. This gets reset by fake_string_dynamics_reset().
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfake_string_dynamics_reset()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_shared.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_shared.3
new file mode 100644 (file)
index 0000000..6058fa9
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_library_shared "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_library_shared \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_library_shared\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a shared library.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_static.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_static.3
new file mode 100644 (file)
index 0000000..29973df
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_library_static "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_library_static \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_library_static\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a static library.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_static_object.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_library_static_object.3
new file mode 100644 (file)
index 0000000..0f74a1a
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_library_static_object "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_library_static_object \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_library_static_object\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a static library objects.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_shared.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_shared.3
new file mode 100644 (file)
index 0000000..c3bf03e
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_object_shared "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_object_shared \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_object_shared\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a shared object.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_static.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_static.3
new file mode 100644 (file)
index 0000000..f9ca94a
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_object_static "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_object_static \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_object_static\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a static object.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_static_library.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_object_static_library.3
new file mode 100644 (file)
index 0000000..7587449
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_object_static_library "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_object_static_library \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_object_static_library\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a static object for a library.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_shared.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_shared.3
new file mode 100644 (file)
index 0000000..655adfe
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_program_shared "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_program_shared \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_program_shared\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a shared program.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_static.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_static.3
new file mode 100644 (file)
index 0000000..1fe5c64
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_program_static "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_program_static \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_program_static\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a static program.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_static_object.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_compile_program_static_object.3
new file mode 100644 (file)
index 0000000..d682ba4
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_compile_program_static_object "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_compile_program_static_object \-
+.SH SYNOPSIS
+.nf
+.B #include <compile.h>
+.sp
+\fBf_status_t fake_build_print_compile_program_static_object\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when compiling a static program objects.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcompile.h\fP(3), \fIfake_build_print_compile_library_shared\fP(3), \fIfake_build_print_compile_library_static\fP(3), \fIfake_build_print_compile_library_static_object\fP(3), \fIfake_build_print_compile_object_shared\fP(3), \fIfake_build_print_compile_object_static\fP(3), \fIfake_build_print_compile_object_static_library\fP(3), \fIfake_build_print_compile_program_shared\fP(3), \fIfake_build_print_compile_program_static\fP(3), \fIfake_build_print_compile_program_static_object\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_error_exist_not_directory.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_error_exist_not_directory.3
new file mode 100644 (file)
index 0000000..535fd19
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_build_print_error_exist_not_directory "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_error_exist_not_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_build_print_error_exist_not_directory\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about not creating path due to a parent directory not existing or is otherwise invalid.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path that cannot be created.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_build_print_error_exist_not_directory\fP(3), \fIfake_build_print_error_missing_required_setting\fP(3), \fIfake_build_print_error_mode_invalid\fP(3), \fIfake_build_print_error_setting_too_long\fP(3), \fIfake_build_print_error_setting_value_too_long\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_error_missing_required_setting.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_error_missing_required_setting.3
new file mode 100644 (file)
index 0000000..eab4ff7
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_build_print_error_missing_required_setting "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_error_missing_required_setting \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_build_print_error_missing_required_setting\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about a required setting missing.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the missing setting.
+
+.TP
+.B path
+The path to the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_build_print_error_exist_not_directory\fP(3), \fIfake_build_print_error_missing_required_setting\fP(3), \fIfake_build_print_error_mode_invalid\fP(3), \fIfake_build_print_error_setting_too_long\fP(3), \fIfake_build_print_error_setting_value_too_long\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_error_mode_invalid.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_error_mode_invalid.3
new file mode 100644 (file)
index 0000000..4a880e6
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_build_print_error_mode_invalid "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_error_mode_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_build_print_error_mode_invalid\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fImode\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about a mode being invalid.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B mode
+The invalid mode.
+
+.TP
+.B path
+The path to the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_build_print_error_exist_not_directory\fP(3), \fIfake_build_print_error_missing_required_setting\fP(3), \fIfake_build_print_error_mode_invalid\fP(3), \fIfake_build_print_error_setting_too_long\fP(3), \fIfake_build_print_error_setting_value_too_long\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_error_setting_too_long.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_error_setting_too_long.3
new file mode 100644 (file)
index 0000000..c62555a
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_build_print_error_setting_too_long "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_error_setting_too_long \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_build_print_error_setting_too_long\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about an unnamed setting being too long.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path that cannot be created.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_build_print_error_exist_not_directory\fP(3), \fIfake_build_print_error_missing_required_setting\fP(3), \fIfake_build_print_error_mode_invalid\fP(3), \fIfake_build_print_error_setting_too_long\fP(3), \fIfake_build_print_error_setting_value_too_long\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_error_setting_value_too_long.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_error_setting_value_too_long.3
new file mode 100644 (file)
index 0000000..203d975
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_build_print_error_setting_value_too_long "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_error_setting_value_too_long \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_build_print_error_setting_value_too_long\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about the given setting for the given file being too long.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the setting.
+
+.TP
+.B path
+The path that cannot be created.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_build_print_error_exist_not_directory\fP(3), \fIfake_build_print_error_missing_required_setting\fP(3), \fIfake_build_print_error_mode_invalid\fP(3), \fIfake_build_print_error_setting_too_long\fP(3), \fIfake_build_print_error_setting_value_too_long\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_message_copying.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_message_copying.3
new file mode 100644 (file)
index 0000000..db7a784
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_build_print_message_copying "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_message_copying \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_build_print_message_copying\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when copying.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path being copied.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_build_print_message_copying\fP(3), \fIfake_build_print_message_skeleton_build_base\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_message_skeleton_build_base.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_message_skeleton_build_base.3
new file mode 100644 (file)
index 0000000..7f62138
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_build_print_message_skeleton_build_base "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_message_skeleton_build_base \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_build_print_message_skeleton_build_base\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when building base skeleton directories.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_build_print_message_copying\fP(3), \fIfake_build_print_message_skeleton_build_base\fP(3), \fIfake_main_t\fP, \fIfake_print_context_important_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_verbose_create_directory.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_verbose_create_directory.3
new file mode 100644 (file)
index 0000000..d645a72
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_build_print_verbose_create_directory "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_verbose_create_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_build_print_verbose_create_directory\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIdirectory\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about di_fake_build_print_verbose_copied_file a directory.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B directory
+The directory created.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_build_print_verbose_create_directory\fP(3), \fIfake_build_print_verbose_linked_file\fP(3), \fIfake_main_t\fP, \fIfake_print_common_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_verbose_linked_file.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_verbose_linked_file.3
new file mode 100644 (file)
index 0000000..f1016f5
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_build_print_verbose_linked_file "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_verbose_linked_file \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_build_print_verbose_linked_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfrom\fP,
+    \fBconst f_string_static_t \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message about linking a file.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B from
+The link source.
+
+.TP
+.B to
+The link destination.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_build_print_verbose_create_directory\fP(3), \fIfake_build_print_verbose_linked_file\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_warning_parameters_contradict.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_warning_parameters_contradict.3
new file mode 100644 (file)
index 0000000..cb53dad
--- /dev/null
@@ -0,0 +1,244 @@
+.TH fake_build_print_warning_parameters_contradict "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_warning_parameters_contradict \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_build_print_warning_parameters_contradict\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_3\fP,
+    \fBconst f_string_static_t \fP\fIname_3\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding two parameters contradicting and designating a default fallback parameter.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol_1
+The symbol for the first parameter.
+
+.TP
+.B name_1
+The name for the first parameter.
+
+.TP
+.B symbol_2
+The symbol for the second parameter.
+
+.TP
+.B name_2
+The name for the second parameter.
+
+.TP
+.B symbol_3
+The symbol for the third parameter (the fallback).
+
+.TP
+.B name_3
+The name for the third parameter (the fallback).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_build_print_warning_parameters_contradict\fP(3), \fIfake_build_print_warning_setting_boolean_may_only_be\fP(3), \fIfake_build_print_warning_setting_both_cannot_when_language\fP(3), \fIfake_build_print_warning_setting_required_default_to\fP(3), \fIfake_build_print_warning_setting_slash_not_allowed\fP(3), \fIfake_build_print_warning_setting_version_may_only_be\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_parameters()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_boolean_may_only_be.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_boolean_may_only_be.3
new file mode 100644 (file)
index 0000000..5b2eba5
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fake_build_print_warning_setting_boolean_may_only_be "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_warning_setting_boolean_may_only_be \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_build_print_warning_setting_boolean_may_only_be\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_string_static_t \fP\fIdefault_to\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message that the setting may only be from a specific set of allowed boolean values.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name for the setting.
+
+.TP
+.B path
+The path to the setting file.
+
+.TP
+.B default_to
+The value being defaulted to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_build_print_warning_parameters_contradict\fP(3), \fIfake_build_print_warning_setting_boolean_may_only_be\fP(3), \fIfake_build_print_warning_setting_both_cannot_when_language\fP(3), \fIfake_build_print_warning_setting_required_default_to\fP(3), \fIfake_build_print_warning_setting_slash_not_allowed\fP(3), \fIfake_build_print_warning_setting_version_may_only_be\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_both_cannot_when_language.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_both_cannot_when_language.3
new file mode 100644 (file)
index 0000000..c91b19e
--- /dev/null
@@ -0,0 +1,153 @@
+.TH fake_build_print_warning_setting_both_cannot_when_language "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_warning_setting_both_cannot_when_language \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_build_print_warning_setting_both_cannot_when_language\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP,
+    \fBconst f_string_static_t \fP\fIname_3\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message regarding two parameters being both false when using a given language.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name_1
+The name for the first setting.
+
+.TP
+.B name_2
+The name for the second setting.
+
+.TP
+.B name_3
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_build_print_warning_parameters_contradict\fP(3), \fIfake_build_print_warning_setting_boolean_may_only_be\fP(3), \fIfake_build_print_warning_setting_both_cannot_when_language\fP(3), \fIfake_build_print_warning_setting_required_default_to\fP(3), \fIfake_build_print_warning_setting_slash_not_allowed\fP(3), \fIfake_build_print_warning_setting_version_may_only_be\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_parameters()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_required_default_to.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_required_default_to.3
new file mode 100644 (file)
index 0000000..a266659
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fake_build_print_warning_setting_required_default_to "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_warning_setting_required_default_to \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_build_print_warning_setting_required_default_to\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_string_static_t \fP\fIdefault_to\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message regarding two parameters being both false when using a given language.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+
+.TP
+.B path
+
+.TP
+.B default_to
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_build_print_warning_parameters_contradict\fP(3), \fIfake_build_print_warning_setting_boolean_may_only_be\fP(3), \fIfake_build_print_warning_setting_both_cannot_when_language\fP(3), \fIfake_build_print_warning_setting_required_default_to\fP(3), \fIfake_build_print_warning_setting_slash_not_allowed\fP(3), \fIfake_build_print_warning_setting_version_may_only_be\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_parameters()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_slash_not_allowed.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_slash_not_allowed.3
new file mode 100644 (file)
index 0000000..7afd097
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_build_print_warning_setting_slash_not_allowed "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_warning_setting_slash_not_allowed \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_build_print_warning_setting_slash_not_allowed\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message that the setting has and must not have forward or backward slashes.
+.PP
+This will note that the slashes are removed.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name for the setting.
+
+.TP
+.B path
+The path to the setting file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_build_print_warning_parameters_contradict\fP(3), \fIfake_build_print_warning_setting_boolean_may_only_be\fP(3), \fIfake_build_print_warning_setting_both_cannot_when_language\fP(3), \fIfake_build_print_warning_setting_required_default_to\fP(3), \fIfake_build_print_warning_setting_slash_not_allowed\fP(3), \fIfake_build_print_warning_setting_version_may_only_be\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_version_may_only_be.3 b/level_3/fake/data/documentation/man/man3/fake_build_print_warning_setting_version_may_only_be.3
new file mode 100644 (file)
index 0000000..800e27c
--- /dev/null
@@ -0,0 +1,152 @@
+.TH fake_build_print_warning_setting_version_may_only_be "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_print_warning_setting_version_may_only_be \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_build_print_warning_setting_version_may_only_be\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst f_string_static_t \fP\fIdefault_to\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message that the setting may only be from a specific set of allowed version values.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name for the setting.
+
+.TP
+.B path
+The path to the setting file.
+
+.TP
+.B default_to
+The value being defaulted to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_build_print_warning_parameters_contradict\fP(3), \fIfake_build_print_warning_setting_boolean_may_only_be\fP(3), \fIfake_build_print_warning_setting_both_cannot_when_language\fP(3), \fIfake_build_print_warning_setting_required_default_to\fP(3), \fIfake_build_print_warning_setting_slash_not_allowed\fP(3), \fIfake_build_print_warning_setting_version_may_only_be\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_program_script.3 b/level_3/fake/data/documentation/man/man3/fake_build_program_script.3
new file mode 100644 (file)
index 0000000..cd978e4
--- /dev/null
@@ -0,0 +1,180 @@
+.TH fake_build_program_script "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_program_script \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBint fake_build_program_script\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the script programs.
+.PP
+If there ever are scripting languages that have a concept of programs, then this function is here to do the job. None of the built in languages support this so this function does nothing.
+.PP
+A script is often referred to as a program, but in this context "script" and "program" are not the same. One potential use of this function could be to construct a script from pieces, effectively building a "program".
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfake_build_program_script\fP(3), \fIfake_build_program_shared\fP(3), \fIfake_build_program_static\fP(3), \fIfake_build_touch()\fP, \fIfake_build_touch()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_program_shared.3 b/level_3/fake/data/documentation/man/man3/fake_build_program_shared.3
new file mode 100644 (file)
index 0000000..220fb5e
--- /dev/null
@@ -0,0 +1,180 @@
+.TH fake_build_program_shared "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_program_shared \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBint fake_build_program_shared\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the shared programs.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: fll_execute_arguments_add().
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfake_build_program_script\fP(3), \fIfake_build_program_shared\fP(3), \fIfake_build_program_static\fP(3), \fIfll_execute_arguments_add()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_execute()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_program_static.3 b/level_3/fake/data/documentation/man/man3/fake_build_program_static.3
new file mode 100644 (file)
index 0000000..047ff28
--- /dev/null
@@ -0,0 +1,178 @@
+.TH fake_build_program_static "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_program_static \-
+.SH SYNOPSIS
+.nf
+.B #include <program.h>
+.sp
+\fBint fake_build_program_static\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst f_mode_t           \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Build the static programs.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: fll_execute_arguments_add().
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The file mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure representing a set of modes intended to be used by file or directory operations.
+.PP
+unknown: The mode for unknown types.
+.sp
+.RS
+.nf
+\fB
+struct f_mode_t {
+  mode_t   \fIblock\fP;
+  mode_t   \fIcharacter\fP;
+  mode_t   \fIdirectory\fP;
+  mode_t   \fIfifo\fP;
+  mode_t   \fIregular\fP;
+  mode_t   \fIlink\fP;
+  mode_t   \fIsocket\fP;
+  mode_t   \fIunknown\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprogram.h\fP(3), \fIfake_build_program_script\fP(3), \fIfake_build_program_shared\fP(3), \fIfake_build_program_static\fP(3), \fIfll_execute_arguments_add()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_execute()\fP, \fIfll_execute_arguments_add()\fP, \fIfake_build_arguments_standard_add()\fP, \fIfake_build_objects_add()\fP, \fIfake_build_sources_add()\fP, \fIfake_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_setting_delete.3 b/level_3/fake/data/documentation/man/man3/fake_build_setting_delete.3
new file mode 100644 (file)
index 0000000..a58d2be
--- /dev/null
@@ -0,0 +1,177 @@
+.TH fake_build_setting_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_build_setting_delete\fP(
+    \fBfake_build_setting_t *const \fP\fIbuild_setting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the build data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B build_setting
+The build setting.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Build settings data.
+.PP
+modes_default: The modes_default setting.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_setting_t {
+  uint8_t             \fIflag\fP;
+  uint8_t             \fIlanguage\fP;
+  uint8_t             \fIversion_file\fP;
+  uint8_t             \fIversion_target\fP;
+  uint8_t             \fIbuild_script\fP;
+  uint8_t             \fIbuild_shared\fP;
+  uint8_t             \fIbuild_static\fP;
+  uint8_t             \fIhas_path_standard\fP;
+  uint8_t             \fIpreserve_path_headers\fP;
+  uint8_t             \fIsearch_exclusive\fP;
+  uint8_t             \fIsearch_shared\fP;
+  uint8_t             \fIsearch_static\fP;
+  f_string_dynamic_t  \fIbuild_compiler\fP;
+  f_string_dynamic_t  \fIbuild_indexer\fP;
+  f_string_dynamic_t  \fIbuild_language\fP;
+  f_string_dynamic_t  \fIbuild_language_path\fP;
+  f_string_dynamic_t  \fIbuild_name\fP;
+  f_string_dynamic_t  \fIbuild_name_library\fP;
+  f_string_dynamic_t  \fIbuild_name_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_static\fP;
+  f_string_dynamic_t  \fIbuild_name_program\fP;
+  f_string_dynamic_t  \fIbuild_name_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_script\fP;
+  f_string_dynamic_t  \fIpath_headers\fP;
+  f_string_dynamic_t  \fIpath_language\fP;
+  f_string_dynamic_t  \fIpath_library_script\fP;
+  f_string_dynamic_t  \fIpath_library_shared\fP;
+  f_string_dynamic_t  \fIpath_library_static\fP;
+  f_string_dynamic_t  \fIpath_object_script\fP;
+  f_string_dynamic_t  \fIpath_object_shared\fP;
+  f_string_dynamic_t  \fIpath_object_static\fP;
+  f_string_dynamic_t  \fIpath_program_script\fP;
+  f_string_dynamic_t  \fIpath_program_shared\fP;
+  f_string_dynamic_t  \fIpath_program_static\fP;
+  f_string_dynamic_t  \fIpath_sources\fP;
+  f_string_dynamic_t  \fIpath_sources_headers\fP;
+  f_string_dynamic_t  \fIpath_sources_library\fP;
+  f_string_dynamic_t  \fIpath_sources_object\fP;
+  f_string_dynamic_t  \fIpath_sources_program\fP;
+  f_string_dynamic_t  \fIpath_sources_script\fP;
+  f_string_dynamic_t  \fIprocess_post\fP;
+  f_string_dynamic_t  \fIprocess_pre\fP;
+  f_string_dynamic_t  \fIstage\fP;
+  f_string_dynamic_t  \fIversion_major\fP;
+  f_string_dynamic_t  \fIversion_major_prefix\fP;
+  f_string_dynamic_t  \fIversion_micro\fP;
+  f_string_dynamic_t  \fIversion_micro_prefix\fP;
+  f_string_dynamic_t  \fIversion_minor\fP;
+  f_string_dynamic_t  \fIversion_minor_prefix\fP;
+  f_string_dynamic_t  \fIversion_nano\fP;
+  f_string_dynamic_t  \fIversion_nano_prefix\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_static\fP;
+  f_string_dynamics_t \fIbuild_indexer_arguments\fP;
+  f_string_dynamics_t \fIbuild_libraries\fP;
+  f_string_dynamics_t \fIbuild_libraries_shared\fP;
+  f_string_dynamics_t \fIbuild_libraries_static\fP;
+  f_string_dynamics_t \fIbuild_objects_library\fP;
+  f_string_dynamics_t \fIbuild_objects_library_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_library_static\fP;
+  f_string_dynamics_t \fIbuild_objects_program\fP;
+  f_string_dynamics_t \fIbuild_objects_program_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_documentation\fP;
+  f_string_dynamics_t \fIbuild_sources_headers\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_static\fP;
+  f_string_dynamics_t \fIbuild_sources_library\fP;
+  f_string_dynamics_t \fIbuild_sources_library_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_library_static\fP;
+  f_string_dynamics_t \fIbuild_sources_object\fP;
+  f_string_dynamics_t \fIbuild_sources_object_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_object_static\fP;
+  f_string_dynamics_t \fIbuild_sources_program\fP;
+  f_string_dynamics_t \fIbuild_sources_program_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_script\fP;
+  f_string_dynamics_t \fIbuild_sources_setting\fP;
+  f_string_dynamics_t \fIdefines\fP;
+  f_string_dynamics_t \fIdefines_library\fP;
+  f_string_dynamics_t \fIdefines_library_shared\fP;
+  f_string_dynamics_t \fIdefines_library_static\fP;
+  f_string_dynamics_t \fIdefines_object\fP;
+  f_string_dynamics_t \fIdefines_object_shared\fP;
+  f_string_dynamics_t \fIdefines_object_static\fP;
+  f_string_dynamics_t \fIdefines_program\fP;
+  f_string_dynamics_t \fIdefines_program_shared\fP;
+  f_string_dynamics_t \fIdefines_program_static\fP;
+  f_string_dynamics_t \fIdefines_shared\fP;
+  f_string_dynamics_t \fIdefines_static\fP;
+  f_string_dynamics_t \fIenvironment\fP;
+  f_string_dynamics_t \fIflags\fP;
+  f_string_dynamics_t \fIflags_library\fP;
+  f_string_dynamics_t \fIflags_library_shared\fP;
+  f_string_dynamics_t \fIflags_library_static\fP;
+  f_string_dynamics_t \fIflags_object\fP;
+  f_string_dynamics_t \fIflags_object_shared\fP;
+  f_string_dynamics_t \fIflags_object_static\fP;
+  f_string_dynamics_t \fIflags_program\fP;
+  f_string_dynamics_t \fIflags_program_shared\fP;
+  f_string_dynamics_t \fIflags_program_static\fP;
+  f_string_dynamics_t \fIflags_shared\fP;
+  f_string_dynamics_t \fIflags_static\fP;
+  f_string_dynamics_t \fImodes\fP;
+  f_string_dynamics_t \fImodes_default\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_skeleton.3 b/level_3/fake/data/documentation/man/man3/fake_build_skeleton.3
new file mode 100644 (file)
index 0000000..cd1dbed
--- /dev/null
@@ -0,0 +1,153 @@
+.TH fake_build_skeleton "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_skeleton \-
+.SH SYNOPSIS
+.nf
+.B #include <skeleton.h>
+.sp
+\fBvoid fake_build_skeleton\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBfake_build_data_t *const \fP\fIdata_build\fP,
+    \fBconst mode_t             \fP\fImode\fP,
+    \fBconst f_string_static_t  \fP\fIfile_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create all of the base directories inside the build directory.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_directory_create(). Errors (with error bit) from: f_directory_exists().
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B mode
+The directory mode.
+
+.TP
+.B file_stage
+The specific stage file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIskeleton.h\fP(3), \fIfake_build_skeleton\fP(3), \fIf_directory_create()\fP, \fIf_directory_exists()\fP, \fIfake_build_touch()\fP, \fIf_directory_create()\fP, \fIf_directory_exists()\fP, \fIfake_build_touch()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_sources_add.3 b/level_3/fake/data/documentation/man/man3/fake_build_sources_add.3
new file mode 100644 (file)
index 0000000..e3d790e
--- /dev/null
@@ -0,0 +1,198 @@
+.TH fake_build_sources_add "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_sources_add \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_sources_add\fP(
+    \fBfake_data_t *const              \fP\fIdata\fP,
+    \fBfake_build_data_t *const        \fP\fIdata_build\fP,
+    \fBconst f_string_static_t *const  \fP\fIsource_path\fP,
+    \fBconst f_string_statics_t *const \fP\fIgeneric\fP,
+    \fBconst f_string_statics_t *const \fP\fIspecific\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add the sources to the execute arguments array.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B source_path
+The source path to use, such as data_build.setting.path_sources.
+
+.TP
+.B generic
+The generic sources to add.
+
+.TP
+.B specific
+The specific sources to add.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIfll_execute_arguments_add()\fP, \fIfll_execute_arguments_add()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_sources_object_add.3 b/level_3/fake/data/documentation/man/man3/fake_build_sources_object_add.3
new file mode 100644 (file)
index 0000000..db02437
--- /dev/null
@@ -0,0 +1,150 @@
+.TH fake_build_sources_object_add "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_sources_object_add \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_sources_object_add\fP(
+    \fBfake_data_t *const             \fP\fIdata\fP,
+    \fBfake_build_data_t *const       \fP\fIdata_build\fP,
+    \fBconst f_string_static_t *const \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Add the sources objects to the execute arguments array.
+.PP
+Must not be NULL.
+.PP
+This modifies data.main.cache_argument. This modifies data.main.cache_arguments.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B data_build
+The build data.
+
+.TP
+.B file
+The source object file to add.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+The build data.
+.PP
+environment: The environment variables.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_data_t {
+  fake_build_setting_t \fIsetting\fP;
+  f_string_maps_t      \fIenvironment\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIfll_execute_arguments_add()\fP, \fIfll_execute_arguments_add()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_stage_delete.3 b/level_3/fake/data/documentation/man/man3/fake_build_stage_delete.3
new file mode 100644 (file)
index 0000000..2ee9fe1
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fake_build_stage_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_stage_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_build_stage_delete\fP(
+    \fBfake_build_stage_t *const \fP\fIbuild_stage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the build data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B build_stage
+The build stage.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The build stage data.
+.PP
+file_sources_settings: The setting source files.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_stage_t {
+  f_string_dynamic_t \fIfile_library_script\fP;
+  f_string_dynamic_t \fIfile_library_shared\fP;
+  f_string_dynamic_t \fIfile_library_static\fP;
+  f_string_dynamic_t \fIfile_library_static_object\fP;
+  f_string_dynamic_t \fIfile_object_script\fP;
+  f_string_dynamic_t \fIfile_object_shared\fP;
+  f_string_dynamic_t \fIfile_object_static\fP;
+  f_string_dynamic_t \fIfile_objects_static\fP;
+  f_string_dynamic_t \fIfile_process_post\fP;
+  f_string_dynamic_t \fIfile_process_pre\fP;
+  f_string_dynamic_t \fIfile_program_script\fP;
+  f_string_dynamic_t \fIfile_program_shared\fP;
+  f_string_dynamic_t \fIfile_program_static\fP;
+  f_string_dynamic_t \fIfile_skeleton\fP;
+  f_string_dynamic_t \fIfile_sources_documentation\fP;
+  f_string_dynamic_t \fIfile_sources_headers\fP;
+  f_string_dynamic_t \fIfile_sources_script\fP;
+  f_string_dynamic_t \fIfile_sources_settings\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_build_touch.3 b/level_3/fake/data/documentation/man/man3/fake_build_touch.3
new file mode 100644 (file)
index 0000000..3d6a355
--- /dev/null
@@ -0,0 +1,100 @@
+.TH fake_build_touch "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_build_touch \-
+.SH SYNOPSIS
+.nf
+.B #include <build.h>
+.sp
+\fBvoid fake_build_touch\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBconst f_string_dynamic_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Touch the given build stage file, but only if there are no current errors in status.
+.PP
+Must not be NULL.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B file
+The file path to touch.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbuild.h\fP(3), \fIfake_build_arguments_standard_add\fP(3), \fIfake_build_copy\fP(3), \fIfake_build_execute_process_script\fP(3), \fIfake_build_get_file_name_without_extension\fP(3), \fIfake_build_objects_add\fP(3), \fIfake_build_operate\fP(3), \fIfake_build_path_source_string\fP(3), \fIfake_build_sources_add\fP(3), \fIfake_build_sources_object_add\fP(3), \fIfake_build_touch\fP(3), \fIf_file_touch()\fP, \fIf_file_touch()\fP, \fIfll_program_print_signal_received()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_clean_operate.3 b/level_3/fake/data/documentation/man/man3/fake_clean_operate.3
new file mode 100644 (file)
index 0000000..2ee6bdb
--- /dev/null
@@ -0,0 +1,95 @@
+.TH fake_clean_operate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_clean_operate \-
+.SH SYNOPSIS
+.nf
+.B #include <clean.h>
+.sp
+\fBvoid fake_clean_operate\fP(
+    \fBfake_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute the clean operation.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_directory_remove() Errors (with error bit) from: f_directory_remove_custom()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIclean.h\fP(3), \fIfake_clean_operate\fP(3), \fIfake_clean_remove_recursively_verbosely\fP(3), \fIf_directory_remove()\fP, \fIf_directory_remove_custom()\fP, \fIf_directory_remove()\fP, \fIf_directory_remove_custom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_clean_remove_recursively_verbosely.3 b/level_3/fake/data/documentation/man/man3/fake_clean_remove_recursively_verbosely.3
new file mode 100644 (file)
index 0000000..ea6b693
--- /dev/null
@@ -0,0 +1,53 @@
+.TH fake_clean_remove_recursively_verbosely "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_clean_remove_recursively_verbosely \-
+.SH SYNOPSIS
+.nf
+.B #include <clean.h>
+.sp
+\fBint fake_clean_remove_recursively_verbosely\fP(
+    \fBconst char *const   \fP\fIpath\fP,
+    \fBconst struct stat  *\fP\fIfile_stat\fP,
+    \fBint                 \fP\fItype\fP,
+    \fBstruct FTW         *\fP\fIentity\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A special function intended to be used directly by nftw().
+.PP
+This is intended to be used by the specified function as a function pointer and therefore follows the required structure.
+.PP
+This is essentially a wrapper to remove().
+.SH PARAMETERS
+.TP
+.B path
+The file path.
+
+.TP
+.B file_stat
+The file stat.
+
+.TP
+.B type
+The file type.
+
+.TP
+.B entity
+The FTW entity.
+
+.SH RETURN VALUE
+.PP
+0 on success. -1 on failure. Check errno for details.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIclean.h\fP(3), \fIfake_clean_operate\fP(3), \fIfake_clean_remove_recursively_verbosely\fP(3), \fIf_directory_remove()\fP, \fInftw()\fP, \fIremove()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_data_delete.3 b/level_3/fake/data/documentation/man/man3/fake_data_delete.3
new file mode 100644 (file)
index 0000000..59a4ad2
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_data_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_data_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_data_delete\fP(
+    \fBfake_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter data.main.settings.state.status.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_do_copy_action.3 b/level_3/fake/data/documentation/man/man3/fake_do_copy_action.3
new file mode 100644 (file)
index 0000000..a7a2a07
--- /dev/null
@@ -0,0 +1,79 @@
+.TH fake_do_copy_action "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_do_copy_action \-
+.SH SYNOPSIS
+.nf
+.B #include <do.h>
+.sp
+\fBvoid fake_do_copy_action\fP(
+    \fBf_directory_recurse_do_t *const \fP\fIrecurse\fP,
+    \fBconst f_string_static_t         \fP\fIname\fP,
+    \fBconst uint64_t                  \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Callback for performing an action regarding the copy operation for fake_build_copy().
+.PP
+This can also be used for a clone or a move operation when the appropriate flags or set.
+.PP
+recurse.state.custom.custom_1: A pointer to f_string_map_t where the custom_1.key is the specific source path and custom_1.value is the destination path during before, action, and after operations.
+.PP
+Must not be NULL.
+.PP
+fake_state_code_local_d: This is required and assumed to be set.
+.PP
+This alters recurse.state.custom.main.setting.state.status and recurse.state.status: F_okay on success.
+.PP
+F_parameter (with error bit) on invalid parameter to the callback.
+.SH PARAMETERS
+.TP
+.B recurse
+The recuse structure.
+
+.TP
+.B name
+The directory name currently being process based on the flag.
+
+.TP
+.B flag
+The flags representing the action.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdo.h\fP(3), \fIfake_do_copy_action\fP(3), \fIfake_do_copy_handle\fP(3), \fIfl_directory_do()\fP, \fIfake_build_copy()\fP, \fIf_file_clone()\fP, \fIf_file_copy()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_file_clone()\fP, \fIf_file_copy()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfake_build_copy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_do_copy_handle.3 b/level_3/fake/data/documentation/man/man3/fake_do_copy_handle.3
new file mode 100644 (file)
index 0000000..e24e6bc
--- /dev/null
@@ -0,0 +1,75 @@
+.TH fake_do_copy_handle "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_do_copy_handle \-
+.SH SYNOPSIS
+.nf
+.B #include <do.h>
+.sp
+\fBvoid fake_do_copy_handle\fP(
+    \fBf_directory_recurse_do_t *const \fP\fIrecurse\fP,
+    \fBconst f_string_static_t         \fP\fIname\fP,
+    \fBconst uint64_t                  \fP\fIflag\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Callback for handling an error regarding the copy operation for fake_build_copy().
+.PP
+This can also be used for a clone or a move operation when the appropriate flags or set.
+.PP
+Must not be NULL.
+.PP
+fake_state_code_local_d: This is required and assumed to be set.
+.PP
+This alters recurse.state.custom.main.setting.state.status: Assigns value from recurse.state.status.
+.SH PARAMETERS
+.TP
+.B recurse
+The recuse structure.
+
+.TP
+.B name
+The directory name currently being process based on the flag.
+
+.TP
+.B flag
+The flags representing the action.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdo.h\fP(3), \fIfake_do_copy_action\fP(3), \fIfake_do_copy_handle\fP(3), \fIfake_build_copy()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_execute.3 b/level_3/fake/data/documentation/man/man3/fake_execute.3
new file mode 100644 (file)
index 0000000..3ec32b8
--- /dev/null
@@ -0,0 +1,152 @@
+.TH fake_execute "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_execute \-
+.SH SYNOPSIS
+.nf
+.B #include <fake.h>
+.sp
+\fBint fake_execute\fP(
+    \fBfake_data_t *const      \fP\fIdata\fP,
+    \fBconst f_string_maps_t   \fP\fIenvironment\fP,
+    \fBconst f_string_static_t \fP\fIprogram\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute the given command and arguments.
+.PP
+Will print the command if in verbose mode.
+.PP
+This alters setting.state.status: F_okay on success. F_child if this is a child process returning.
+.PP
+F_interrupt (with error bit) on interrupt signal received. F_failure (with error bit) on execution failure. F_file_found_not (with error bit) on could not execute program because program is not found.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B environment
+The environment variable data.
+
+.TP
+.B program
+The program to be executed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string maps.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_maps_t {
+  f_string_map_t     *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code result from execution. A value of 1 is returned if status has the error bit set.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfake.h\fP(3), \fIfake_execute\fP(3), \fIfake_file_buffer\fP(3), \fIfake_main\fP(3), \fIfake_pipe_buffer\fP(3), \fIfake_validate_parameter_paths\fP(3), \fIfll_execute_program()\fP, \fIfll_execute_program()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_file_buffer.3 b/level_3/fake/data/documentation/man/man3/fake_file_buffer.3
new file mode 100644 (file)
index 0000000..22a4ec7
--- /dev/null
@@ -0,0 +1,133 @@
+.TH fake_file_buffer "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_file_buffer \-
+.SH SYNOPSIS
+.nf
+.B #include <fake.h>
+.sp
+\fBvoid fake_file_buffer\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBconst f_string_static_t   \fP\fIpath_file\fP,
+    \fBconst uint8_t             \fP\fIrequired\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the contents of a file into the given buffer, handling all potential errors.
+.PP
+This alters data.main->setting.state.status: F_okay on success. F_false on file not found and file is not required.
+.PP
+F_file_found_not (with error bit) if file is not found and file is required. F_interrupt (with error bit) on interrupt signal received.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B path_file
+The path to the file to load.
+
+.TP
+.B required
+If TRUE, then return error when file is not found. If FALSE, then return F_false when file is not found.
+
+.TP
+.B buffer
+A buffer containing the contents of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfake.h\fP(3), \fIfake_execute\fP(3), \fIfake_file_buffer\fP(3), \fIfake_main\fP(3), \fIfake_pipe_buffer\fP(3), \fIfake_validate_parameter_paths\fP(3), \fIf_file_exists()\fP, \fIf_file_size()\fP, \fIf_file_stream_open()\fP, \fIf_file_stream_read()\fP, \fIf_memory_array_increase_by()\fP, \fIf_file_exists()\fP, \fIf_file_size()\fP, \fIf_file_stream_open()\fP, \fIf_file_stream_read()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_iki_data_reset.3 b/level_3/fake/data/documentation/man/man3/fake_iki_data_reset.3
new file mode 100644 (file)
index 0000000..6dcc70e
--- /dev/null
@@ -0,0 +1,54 @@
+.TH fake_iki_data_reset "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_iki_data_reset \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_iki_data_reset\fP(
+    \fBf_iki_data_t *const \fP\fIiki_data\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset the iki variable data, performing an over-size check and shrinking if necessary.
+.PP
+This ignores errors when shrinking.
+.SH PARAMETERS
+.TP
+.B iki_data
+The iki data to shrink.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_iki_data_reset\fP(3), \fIfake_setting_load\fP(3), \fIfake_setting_load_parameter_callback\fP(3), \fIfake_string_dynamic_reset\fP(3), \fIfake_string_dynamics_reset\fP(3), \fIfake_string_dynamics_reset_to\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_main.3 b/level_3/fake/data/documentation/man/man3/fake_main.3
new file mode 100644 (file)
index 0000000..14c8e96
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fake_main "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_main \-
+.SH SYNOPSIS
+.nf
+.B #include <fake.h>
+.sp
+\fBvoid fake_main\fP(
+    \fBfake_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+This alters main.setting.state.status: F_okay on success. F_child if this is a child process returning.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_string_dynamic_append() Errors (with error bit) from: fake_build_operate() Errors (with error bit) from: fake_clean_operate() Errors (with error bit) from: fake_make_operate() Errors (with error bit) from: fake_path_generate() Errors (with error bit) from: fake_skeleton_operate() Errors (with error bit) from: fake_validate_parameter_paths()
+.SH PARAMETERS
+.TP
+.B main
+The main program and setting data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfake.h\fP(3), \fIfake_execute\fP(3), \fIfake_file_buffer\fP(3), \fIfake_main\fP(3), \fIfake_pipe_buffer\fP(3), \fIfake_validate_parameter_paths\fP(3), \fIf_string_dynamic_append()\fP, \fIfake_build_operate()\fP, \fIfake_clean_operate()\fP, \fIfake_make_operate()\fP, \fIfake_path_generate()\fP, \fIfake_skeleton_operate()\fP, \fIfake_validate_parameter_paths()\fP, \fIf_string_dynamic_append()\fP, \fIfake_build_operate()\fP, \fIfake_clean_operate()\fP, \fIfake_make_operate()\fP, \fIfake_path_generate()\fP, \fIfake_skeleton_operate()\fP, \fIfake_validate_parameter_paths()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_main_delete.3 b/level_3/fake/data/documentation/man/man3/fake_main_delete.3
new file mode 100644 (file)
index 0000000..617c49f
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fake_main_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_main_delete\fP(
+    \fBfake_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter data_make.main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3), \fIf_directory_recurse_do_delete()\fP, \fIf_iki_data_delete()\fP, \fIf_memory_array_resize()\fP, \fIfll_program_data_delete()\fP, \fIfake_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_assure_inside_project.3 b/level_3/fake/data/documentation/man/man3/fake_make_assure_inside_project.3
new file mode 100644 (file)
index 0000000..8d20f14
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fake_make_assure_inside_project "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_assure_inside_project \-
+.SH SYNOPSIS
+.nf
+.B #include <make.h>
+.sp
+\fBvoid fake_make_assure_inside_project\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Assure that a path is within the project root path.
+.PP
+This alters data_make.main->setting.state.status: F_true if inside the project. F_false (with error bit) if path exists outside of the root project path.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file. The data_make.cache_path will be updated to reflect the full path to this file.
+
+.TP
+.B path
+file path to get the real path of.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImake.h\fP(3), \fIfake_make_assure_inside_project\fP(3), \fIfake_make_get_id\fP(3), \fIfake_make_get_id_mode\fP(3), \fIfake_make_path_relative\fP(3), \fIf_compare_dynamic_partial()\fP, \fIfl_path_canonical()\fP, \fIf_compare_dynamic_partial()\fP, \fIfl_path_canonical()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_data_delete.3 b/level_3/fake/data/documentation/man/man3/fake_make_data_delete.3
new file mode 100644 (file)
index 0000000..2157695
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_data_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_data_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_make_data_delete\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate make data.
+.PP
+Must not be NULL.
+.PP
+This does not alter data_make.main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B data_make
+The make data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_get_id.3 b/level_3/fake/data/documentation/man/man3/fake_make_get_id.3
new file mode 100644 (file)
index 0000000..a800657
--- /dev/null
@@ -0,0 +1,102 @@
+.TH fake_make_get_id "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_get_id \-
+.SH SYNOPSIS
+.nf
+.B #include <make.h>
+.sp
+\fBf_number_unsigned_t fake_make_get_id\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIis_owner\fP,
+    \fBconst f_string_static_t \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the group id from either a string representing the number or a string representing the name.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error. F_exist_not (with error bit) if there is no owner or group by the given name. F_parameter (with error bit) on invalid parameter.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file. The data_make.cache_path will be updated to reflect the full path to this file.
+
+.TP
+.B is_owner
+If TRUE, then buffer represents a UID. If FALSE, then buffer represents a GID.
+
+.TP
+.B buffer
+The string containing the name or number.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The detected owner id or group id. When is_owner is TRUE, then this should be cast to type (f_uid_t *) or (f_id_t *). When is_owner is FALSE, then this should be cast to type (f_gid_t *) or (f_id_t *). This is set to 0 on any error, check data_make.main->setting.state.status for error.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImake.h\fP(3), \fIfake_make_assure_inside_project\fP(3), \fIfake_make_get_id\fP(3), \fIfake_make_get_id_mode\fP(3), \fIfake_make_path_relative\fP(3), \fIf_account_group_id_by_name()\fP, \fIf_account_id_by_name()\fP, \fIfl_conversion_dynamic_to_unsigned_detect()\fP, \fIf_account_group_id_by_name()\fP, \fIf_account_id_by_name()\fP, \fIfl_conversion_dynamic_to_unsigned_detect()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_get_id_mode.3 b/level_3/fake/data/documentation/man/man3/fake_make_get_id_mode.3
new file mode 100644 (file)
index 0000000..9c68424
--- /dev/null
@@ -0,0 +1,104 @@
+.TH fake_make_get_id_mode "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_get_id_mode \-
+.SH SYNOPSIS
+.nf
+.B #include <make.h>
+.sp
+\fBvoid fake_make_get_id_mode\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBf_file_mode_t          *\fP\fImode\fP,
+    \fBuint8_t                *\fP\fIreplace\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the mode id from either a string representing the number or a string representing the mode.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error. F_parameter (with error bit) on invalid parameter.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file. The data_make.cache_path will be updated to reflect the full path to this file.
+
+.TP
+.B buffer
+The string containing the name or number.
+
+.TP
+.B mode
+The determined mode. This uses bitwise data.
+
+.TP
+.B replace
+The determined modes that are to be replaced, such as: F_file_mode_t_replace_owner_d. This uses bitwise data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImake.h\fP(3), \fIfake_make_assure_inside_project\fP(3), \fIfake_make_get_id\fP(3), \fIfake_make_get_id_mode\fP(3), \fIfake_make_path_relative\fP(3), \fIf_file_mode_from_string()\fP, \fIf_file_mode_from_string()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile.3
new file mode 100644 (file)
index 0000000..7f830f4
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fake_make_load_fakefile "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIprocess_pipe\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Find the fake file, load it, validate it, and process it.
+.PP
+This will process any additional files as necessary, such as the build settings file.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_fss_apply_delimit(). Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_string_dynamic_partial_append(). Errors (with error bit) from: fll_fss_basic_list_read(). Errors (with error bit) from: fll_fss_extended_read(). Errors (with error bit) from: fll_program_standard_signal_received().
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B process_pipe
+If TRUE, then use the program input pipe. If FALSE, then ignore the program input pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3), \fIf_fss_apply_delimit()\fP, \fIf_memory_array_resize()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_partial_append()\fP, \fIfll_fss_basic_list_read()\fP, \fIfll_fss_extended_read()\fP, \fIfll_program_standard_signal_received()\fP, \fIfake_build_load_setting()\fP, \fIfake_make_load_fakefile_setting_build()\fP, \fIfake_make_load_fakefile_setting_compiler()\fP, \fIfake_make_load_fakefile_setting_define_and_parameter()\fP, \fIfake_make_load_fakefile_setting_environment()\fP, \fIfake_make_load_fakefile_setting_fail()\fP, \fIfake_make_load_fakefile_setting_indexer()\fP, \fIfake_make_load_fakefile_setting_parameter()\fP, \fIfake_file_buffer()\fP, \fIfake_pipe_buffer()\fP, \fIf_fss_apply_delimit()\fP, \fIf_memory_array_resize()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_partial_append()\fP, \fIfll_fss_basic_list_read()\fP, \fIfll_fss_extended_read()\fP, \fIfake_build_load_setting()\fP, \fIfake_make_load_fakefile_setting_build()\fP, \fIfake_make_load_fakefile_setting_compiler()\fP, \fIfake_make_load_fakefile_setting_define_and_parameter()\fP, \fIfake_make_load_fakefile_setting_environment()\fP, \fIfake_make_load_fakefile_setting_fail()\fP, \fIfake_make_load_fakefile_setting_indexer()\fP, \fIfake_make_load_fakefile_setting_parameter()\fP, \fIfake_file_buffer()\fP, \fIfake_pipe_buffer()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_build.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_build.3
new file mode 100644 (file)
index 0000000..0a3babf
--- /dev/null
@@ -0,0 +1,113 @@
+.TH fake_make_load_fakefile_setting_build "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_build \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_build\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIobject\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "build".
+.PP
+This does not alter data_make.main.setting.state.status.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B object
+The setting object.
+
+.TP
+.B content
+The setting content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_compiler.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_compiler.3
new file mode 100644 (file)
index 0000000..4f80d6e
--- /dev/null
@@ -0,0 +1,138 @@
+.TH fake_make_load_fakefile_setting_compiler "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_compiler \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_compiler\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIobject\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP,
+    \fBf_range_t **const       \fP\fIrange_compiler\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "compiler".
+.PP
+Must not be NULL.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B object
+The setting object.
+
+.TP
+.B content
+The setting content.
+
+.TP
+.B range_compiler
+A pointer to the range that representing the compiler setting within the buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_define_and_parameter.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_define_and_parameter.3
new file mode 100644 (file)
index 0000000..c6f4580
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_load_fakefile_setting_define_and_parameter "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_define_and_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_define_and_parameter\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBf_fss_set_t *const      \fP\fIsettings\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "parameter".
+.PP
+Must not be NULL.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_environment_set(). Errors (with error bit) from: f_string_dynamic_mash(). Errors (with error bit) from: f_string_dynamic_mash_nulless(). Errors (with error bit) from: fll_fss_snatch_map_apart().
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B settings
+The settings data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds an fss object with a set of fss content.
+.PP
+The objects and contents should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+contents: The array of contents.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_set_t {
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3), \fIf_environment_set()\fP, \fIf_string_dynamic_mash()\fP, \fIf_string_dynamic_mash_nulless()\fP, \fIfll_fss_snatch_map_apart()\fP, \fIfake_build_load_setting_process()\fP, \fIfake_make_operate_validate_define_name()\fP, \fIf_environment_set()\fP, \fIf_string_dynamic_mash()\fP, \fIf_string_dynamic_mash_nulless()\fP, \fIfll_fss_snatch_map_apart()\fP, \fIfake_build_load_setting_process()\fP, \fIfake_make_operate_validate_define_name()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_environment.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_environment.3
new file mode 100644 (file)
index 0000000..d6ae19a
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fake_make_load_fakefile_setting_environment "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_environment \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_environment\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "environment".
+.PP
+Must not be NULL.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B content
+The setting content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_fail.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_fail.3
new file mode 100644 (file)
index 0000000..32168a5
--- /dev/null
@@ -0,0 +1,111 @@
+.TH fake_make_load_fakefile_setting_fail "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_fail \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_fail\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIobject\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "fail".
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B object
+The setting object.
+
+.TP
+.B content
+The setting content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_indexer.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_indexer.3
new file mode 100644 (file)
index 0000000..a1289d0
--- /dev/null
@@ -0,0 +1,138 @@
+.TH fake_make_load_fakefile_setting_indexer "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_indexer \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_indexer\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIobject\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP,
+    \fBf_range_t **const       \fP\fIrange_indexer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "indexer".
+.PP
+Must not be NULL.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B object
+The setting object.
+
+.TP
+.B content
+The setting content.
+
+.TP
+.B range_indexer
+A pointer to the range that representing the indexer setting within the buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_parameter.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_parameter.3
new file mode 100644 (file)
index 0000000..0e4061e
--- /dev/null
@@ -0,0 +1,117 @@
+.TH fake_make_load_fakefile_setting_parameter "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_parameter\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIobject\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "parameter".
+.PP
+This only processes special "parameter" settings, namely "return". For all other "parameter" settings, see fake_make_load_fakefile_setting_define_and_parameter().
+.PP
+Must not be NULL.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B object
+The setting object.
+
+.TP
+.B content
+The setting content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_string_append_assure()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_partial_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_stage.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_fakefile_setting_stage.3
new file mode 100644 (file)
index 0000000..ca9ac50
--- /dev/null
@@ -0,0 +1,115 @@
+.TH fake_make_load_fakefile_setting_stage "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_fakefile_setting_stage \-
+.SH SYNOPSIS
+.nf
+.B #include <load_fakefile.h>
+.sp
+\fBvoid fake_make_load_fakefile_setting_stage\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIobject\fP,
+    \fBf_ranges_t *const       \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the fakefile setting "stage".
+.PP
+Must not be NULL.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B object
+The setting object.
+
+.TP
+.B content
+The setting content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_fakefile.h\fP(3), \fIfake_make_load_fakefile\fP(3), \fIfake_make_load_fakefile_setting_build\fP(3), \fIfake_make_load_fakefile_setting_compiler\fP(3), \fIfake_make_load_fakefile_setting_define_and_parameter\fP(3), \fIfake_make_load_fakefile_setting_environment\fP(3), \fIfake_make_load_fakefile_setting_fail\fP(3), \fIfake_make_load_fakefile_setting_indexer\fP(3), \fIfake_make_load_fakefile_setting_parameter\fP(3), \fIfake_make_load_fakefile_setting_stage\fP(3), \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_load_parameters.3 b/level_3/fake/data/documentation/man/man3/fake_make_load_parameters.3
new file mode 100644 (file)
index 0000000..d6d455b
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_load_parameters "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_load_parameters \-
+.SH SYNOPSIS
+.nf
+.B #include <load_parameters.h>
+.sp
+\fBvoid fake_make_load_parameters\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the environment variables into a structure more readily available for using in parameter expansion.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_memory_array_increase(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: f_string_dynamic_append_nulless().
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload_parameters.h\fP(3), \fIfake_make_load_parameters\fP(3), \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate.3
new file mode 100644 (file)
index 0000000..8c2af95
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fake_make_operate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate \-
+.SH SYNOPSIS
+.nf
+.B #include <operate.h>
+.sp
+\fBvoid fake_make_operate\fP(
+    \fBfake_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute the make sections and their respective operations.
+.PP
+The first section operated on is the 'main' section. The 'settings' section is only loaded into settings and is never operated on.
+.PP
+This alters data.main->setting.state.status: F_okay on success. F_data_not on success but fakefile is empty.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_directory_open() Errors (with error bit) from: f_memory_array_increase() Errors (with error bit) from: f_path_change_at() Errors (with error bit) from: f_path_current()
+.PP
+Errors (with error bit) from: fake_make_load_fakefile() Errors (with error bit) from: fake_make_load_parameters() Errors (with error bit) from: fake_make_operate_section()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate.h\fP(3), \fIfake_make_operate\fP(3), \fIfake_make_operate_expand\fP(3), \fIfake_make_operate_expand_build\fP(3), \fIfake_make_operate_expand_context\fP(3), \fIfake_make_operate_expand_environment\fP(3), \fIfake_make_operate_section\fP(3), \fIf_directory_open()\fP, \fIf_memory_array_increase()\fP, \fIf_path_change_at()\fP, \fIf_path_current()\fP, \fIfake_make_load_fakefile()\fP, \fIfake_make_load_parameters()\fP, \fIfake_make_operate_section()\fP, \fIf_directory_open()\fP, \fIf_memory_array_increase()\fP, \fIf_path_change_at()\fP, \fIf_path_current()\fP, \fIfll_program_print_signal_received()\fP, \fIfake_make_load_fakefile()\fP, \fIfake_make_load_parameters()\fP, \fIfake_make_operate_section()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_block_postprocess.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_block_postprocess.3
new file mode 100644 (file)
index 0000000..6e23dbb
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fake_make_operate_block_postprocess "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_block_postprocess \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_block.h>
+.sp
+\fBvoid fake_make_operate_block_postprocess\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBconst uint8_t               \fP\fIlast\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform block post-processing.
+.PP
+This is to be called once an operation is performed or skipped.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B last
+If TRUE, then this is the last line. If FALSE, then this is not the last line.
+
+.TP
+.B state_process
+The operation and if-condition states.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_block.h\fP(3), \fIfake_make_operate_block_postprocess\fP(3), \fIfake_make_operate_block_prepare\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_block_prepare.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_block_prepare.3
new file mode 100644 (file)
index 0000000..343e47f
--- /dev/null
@@ -0,0 +1,58 @@
+.TH fake_make_operate_block_prepare "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_block_prepare \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_block.h>
+.sp
+\fBvoid fake_make_operate_block_prepare\fP(
+    \fBfake_state_process_t *const \fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Prepare the block for the next operation.
+.PP
+This is to be called before validation but after expanding the operation. Whether or not a block ends can only be done after the next line is processed.
+.SH PARAMETERS
+.TP
+.B state_process
+The operation and if-condition states.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_block.h\fP(3), \fIfake_make_operate_block_postprocess\fP(3), \fIfake_make_operate_block_prepare\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_expand.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_expand.3
new file mode 100644 (file)
index 0000000..63c71be
--- /dev/null
@@ -0,0 +1,143 @@
+.TH fake_make_operate_expand "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_expand \-
+.SH SYNOPSIS
+.nf
+.B #include <operate.h>
+.sp
+\fBvoid fake_make_operate_expand\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_range_t         \fP\fIsection_name\fP,
+    \fBconst f_ranges_t        \fP\fIcontent\fP,
+    \fBconst f_uint8s_t        \fP\fIquotes\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+For a given make section operation, expand the content into an arguments array for that operation.
+.PP
+This prints errors via data_make.error.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success. F_data_not on success but fakefile is empty.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_compare_dynamic_partial_string() Errors (with error bit) from: f_memory_array_increase() Errors (with error bit) from: f_memory_array_increase_by() Errors (with error bit) from: f_string_dynamic_append() Errors (with error bit) from: f_string_dynamic_append_assure() Errors (with error bit) from: f_string_dynamic_append_nulless() Errors (with error bit) from: f_string_dynamic_partial_append_nulless() Errors (with error bit) from: fl_iki_read()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B section_name
+The section name.
+
+.TP
+.B content
+The content array.
+
+.TP
+.B quotes
+The array of quotes associated with the content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of ranges.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_ranges_t {
+  f_range_t          *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array uint8_t.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_uint8s_t {
+  uint8_t            *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate.h\fP(3), \fIfake_make_operate\fP(3), \fIfake_make_operate_expand\fP(3), \fIfake_make_operate_expand_build\fP(3), \fIfake_make_operate_expand_context\fP(3), \fIfake_make_operate_expand_environment\fP(3), \fIfake_make_operate_section\fP(3), \fIf_compare_dynamic_partial_string()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIfl_iki_read()\fP, \fIfake_make_operate_expand_build()\fP, \fIfake_make_operate_expand_context()\fP, \fIfake_make_operate_expand_environment()\fP, \fIf_compare_dynamic_partial_string()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_assure()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIfl_iki_read()\fP, \fIfake_make_operate_expand_build()\fP, \fIfake_make_operate_expand_context()\fP, \fIfake_make_operate_expand_environment()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_expand_build.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_expand_build.3
new file mode 100644 (file)
index 0000000..d51bf0e
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fake_make_operate_expand_build "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_expand_build \-
+.SH SYNOPSIS
+.nf
+.B #include <operate.h>
+.sp
+\fBvoid fake_make_operate_expand_build\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIquote\fP,
+    \fBconst f_range_t         \fP\fIrange_name\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the expand operation, specifically for the build settings.
+.PP
+This alters data.main->setting.state.status: F_data_not on success, but nothing is added (data length to append is 0). F_true on success and match expanded. F_false on no matches to expand.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B quote
+The quote associated with the content.
+
+.TP
+.B range_name
+The range representing the variable content name string within the data_make.main.buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate.h\fP(3), \fIfake_make_operate\fP(3), \fIfake_make_operate_expand\fP(3), \fIfake_make_operate_expand_build\fP(3), \fIfake_make_operate_expand_context\fP(3), \fIfake_make_operate_expand_environment\fP(3), \fIfake_make_operate_section\fP(3), \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_mash()\fP, \fIf_memory_array_increase()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_mash()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_expand_context.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_expand_context.3
new file mode 100644 (file)
index 0000000..2de53ab
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_operate_expand_context "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_expand_context \-
+.SH SYNOPSIS
+.nf
+.B #include <operate.h>
+.sp
+\fBvoid fake_make_operate_expand_context\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIquote\fP,
+    \fBconst f_range_t         \fP\fIrange_name\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the expand operation, specifically for the context variables.
+.PP
+Unknown or unsupported context variables are expanded into an empty string.
+.PP
+This alters data.main->setting.state.status: F_true on success and match expanded. F_false on no matches to expand.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B quote
+The quote associated with the content.
+
+.TP
+.B range_name
+The range representing the variable content name string within the data_make.main.buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate.h\fP(3), \fIfake_make_operate\fP(3), \fIfake_make_operate_expand\fP(3), \fIfake_make_operate_expand_build\fP(3), \fIfake_make_operate_expand_context\fP(3), \fIfake_make_operate_expand_environment\fP(3), \fIfake_make_operate_section\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_expand_environment.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_expand_environment.3
new file mode 100644 (file)
index 0000000..fef3d3d
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fake_make_operate_expand_environment "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_expand_environment \-
+.SH SYNOPSIS
+.nf
+.B #include <operate.h>
+.sp
+\fBvoid fake_make_operate_expand_environment\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIquote\fP,
+    \fBconst f_range_t         \fP\fIrange_name\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the expand operation, specifically for the environment variables.
+.PP
+This alters data.main->setting.state.status: F_data_not on success, but nothing is added (data length to append is 0). F_true on success and match expanded. F_false on no matches to expand.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B quote
+The quote associated with the content.
+
+.TP
+.B range_name
+The range representing the variable content name string within the data_make.main.buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate.h\fP(3), \fIfake_make_operate\fP(3), \fIfake_make_operate_expand\fP(3), \fIfake_make_operate_expand_build\fP(3), \fIfake_make_operate_expand_context\fP(3), \fIfake_make_operate_expand_environment\fP(3), \fIfake_make_operate_section\fP(3), \fIf_environment_get()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIf_environment_get()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process.3
new file mode 100644 (file)
index 0000000..4367958
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fake_make_operate_process "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process.h>
+.sp
+\fBint fake_make_operate_process\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBconst f_range_t             \fP\fIsection_name\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP,
+    \fBf_number_unsigneds_t *const \fP\fIsection_stack\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform a specific make operation within the given section.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B section_name
+The section name.
+
+.TP
+.B state_process
+The operation and if-condition states.
+
+.TP
+.B section_stack
+The current operation stack.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process.h\fP(3), \fIfake_make_operate_process\fP(3), \fIfake_make_operate_process_buffer_escape\fP(3), \fIfake_make_operate_process_execute\fP(3), \fIfake_make_operate_process_return\fP(3), \fIfake_make_operate_process_run\fP(3), \fIfake_make_operate_process_run()\fP, \fIfake_make_operate_process_type_break()\fP, \fIfake_make_operate_process_type_build()\fP, \fIfake_make_operate_process_type_clean()\fP, \fIfake_make_operate_process_type_copy()\fP, \fIfake_make_operate_process_type_compile()\fP, \fIfake_make_operate_process_type_copy()\fP, \fIfake_make_operate_process_type_define()\fP, \fIfake_make_operate_process_type_deletes()\fP, \fIfake_make_operate_process_type_deletes()\fP, \fIfake_make_operate_process_type_exit()\fP, \fIfake_make_operate_process_type_fail()\fP, \fIfake_make_operate_process_type_groups()\fP, \fIfake_make_operate_process_type_groups()\fP, \fIfake_make_operate_process_type_condition()\fP, \fIfake_make_operate_process_type_index()\fP, \fIfake_make_operate_process_type_link()\fP, \fIfake_make_operate_process_type_modes()\fP, \fIfake_make_operate_process_type_modes()\fP, \fIfake_make_operate_process_type_move()\fP, \fIfake_make_operate_process_type_operate()\fP, \fIfake_make_operate_process_type_owners()\fP, \fIfake_make_operate_process_type_owners()\fP, \fIfake_make_operate_process_type_parameter()\fP, \fIfake_make_operate_process_type_pop()\fP, \fIfake_make_operate_process_type_print()\fP, \fIfake_make_operate_process_type_skeleton()\fP, \fIfake_make_operate_process_type_to()\fP, \fIfake_make_operate_process_type_top()\fP, \fIfake_make_operate_process_type_touch()\fP, \fIfake_make_operate_process_type_write()\fP, \fIfake_make_operate_process_run()\fP, \fIfake_make_operate_process_type_break()\fP, \fIfake_make_operate_process_type_build()\fP, \fIfake_make_operate_process_type_clean()\fP, \fIfake_make_operate_process_type_copy()\fP, \fIfake_make_operate_process_type_compile()\fP, \fIfake_make_operate_process_type_copy()\fP, \fIfake_make_operate_process_type_define()\fP, \fIfake_make_operate_process_type_deletes()\fP, \fIfake_make_operate_process_type_deletes()\fP, \fIfake_make_operate_process_type_exit()\fP, \fIfake_make_operate_process_type_fail()\fP, \fIfake_make_operate_process_type_groups()\fP, \fIfake_make_operate_process_type_groups()\fP, \fIfake_make_operate_process_type_condition()\fP, \fIfake_make_operate_process_type_index()\fP, \fIfake_make_operate_process_type_link()\fP, \fIfake_make_operate_process_type_modes()\fP, \fIfake_make_operate_process_type_modes()\fP, \fIfake_make_operate_process_type_move()\fP, \fIfake_make_operate_process_type_operate()\fP, \fIfake_make_operate_process_type_owners()\fP, \fIfake_make_operate_process_type_owners()\fP, \fIfake_make_operate_process_type_parameter()\fP, \fIfake_make_operate_process_type_pop()\fP, \fIfake_make_operate_process_type_print()\fP, \fIfake_make_operate_process_type_skeleton()\fP, \fIfake_make_operate_process_type_to()\fP, \fIfake_make_operate_process_type_top()\fP, \fIfake_make_operate_process_type_touch()\fP, \fIfake_make_operate_process_type_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_buffer_escape.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_buffer_escape.3
new file mode 100644 (file)
index 0000000..4f3ea23
--- /dev/null
@@ -0,0 +1,119 @@
+.TH fake_make_operate_process_buffer_escape "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_buffer_escape \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process.h>
+.sp
+\fBvoid fake_make_operate_process_buffer_escape\fP(
+    \fBfake_make_data_t *const   \fP\fIdata_make\fP,
+    \fBconst f_string_static_t   \fP\fIsource\fP,
+    \fBf_string_dynamic_t *const \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the given string, converting escape sequences into code.
+.PP
+"\\": Backslash Character (may require additional slashes in certain circumstances.)
+.PP
+  - "\0": NULL Character.
+.PP
+  - "\U+": Unicode Sequence (followed by a valid Unicode sequence with a minimum 4 hexadecimal digits and a maximum of 6 hexadecimal digits).
+.PP
+  - "!": Non-printing separator, allowing for "\U+000A\ 5" to be equivalent to "\n5".
+.PP
+If the Unicode is invalid, then nothing is copied for that character (the invalid character is skipped when printing).
+.PP
+Example Unicodes\:
+.PP
+  - "\U+000A": Prints a new line, equivalent to "
+.PP
+".
+.PP
+  - "\U+2E19": Prints the Unicode feather-like character "⸙".
+.PP
+Only ASCII alpha-numeric hexadecimal digits are allowed in the Unicode sequence (upper or lower case).
+.PP
+Invalid or unknown escape sequences are not copied.
+.PP
+This alters date_make.setting.state.status: F_okay on success. F_data_not if source.used is 0.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B source
+The source string to process and esacpe.
+
+.TP
+.B destination
+The processed and escaped string. This is appended to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process.h\fP(3), \fIfake_make_operate_process\fP(3), \fIfake_make_operate_process_buffer_escape\fP(3), \fIfake_make_operate_process_execute\fP(3), \fIfake_make_operate_process_return\fP(3), \fIfake_make_operate_process_run\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_utf_unicode_from()\fP, \fIf_utf_unicode_string_to()\fP, \fIf_memory_array_increase_by()\fP, \fIf_utf_unicode_from()\fP, \fIf_utf_unicode_string_to()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_execute.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_execute.3
new file mode 100644 (file)
index 0000000..72ad852
--- /dev/null
@@ -0,0 +1,127 @@
+.TH fake_make_operate_process_execute "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_execute \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process.h>
+.sp
+\fBvoid fake_make_operate_process_execute\fP(
+    \fBfake_make_data_t *const  \fP\fIdata_make\fP,
+    \fBconst f_string_static_t  \fP\fIprogram\fP,
+    \fBconst f_string_statics_t \fP\fIarguments\fP,
+    \fBconst uint8_t            \fP\fIas_shell\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute either the run operation or the shell operation.
+.PP
+This alters date_make.setting.state.status: F_okay on success. F_data_not if both program.used is 0 and arguments.used is 0.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_environment_get_all(). Errors (with error bit) from: fl_environment_load_names(). Errors (with error bit) from: fll_execute_program().
+.PP
+Errors (with error bit) from: fake_make_operate_process_return().
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B program
+The program to be executed.
+
+.TP
+.B arguments
+The arguments for the run or shell operation.
+
+.TP
+.B as_shell
+When TRUE, this is a shell operation. When FALSE, this is a run operation.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process.h\fP(3), \fIfake_make_operate_process\fP(3), \fIfake_make_operate_process_buffer_escape\fP(3), \fIfake_make_operate_process_execute\fP(3), \fIfake_make_operate_process_return\fP(3), \fIfake_make_operate_process_run\fP(3), \fIf_environment_get_all()\fP, \fIfl_environment_load_names()\fP, \fIfll_execute_program()\fP, \fIfake_make_operate_process_return()\fP, \fIf_environment_get_all()\fP, \fIfl_environment_load_names()\fP, \fIfll_execute_program()\fP, \fIfake_make_operate_process_return()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_return.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_return.3
new file mode 100644 (file)
index 0000000..a66e4ea
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fake_make_operate_process_return "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_return \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process.h>
+.sp
+\fBvoid fake_make_operate_process_return\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst int               \fP\fIreturn_code\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Handle the return code, converting it to a standard return number and store it as a string.
+.PP
+The return value is stored in: data_make.main->setting_make.parameter.array[0].value.array[0].
+.PP
+This alters date_make.setting.state.status: F_okay on success. F_failure on identifying the return code as an error code and fail mode is not set to fake_make_operation_fail_exit_e.
+.PP
+F_failure (with error bit) on identifying the return code as an error code and fail mode is set to fake_make_operation_fail_exit_e.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B return_code
+The return code to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process.h\fP(3), \fIfake_make_operate_process\fP(3), \fIfake_make_operate_process_buffer_escape\fP(3), \fIfake_make_operate_process_execute\fP(3), \fIfake_make_operate_process_return\fP(3), \fIfake_make_operate_process_run\fP(3), \fIf_conversion_number_signed_to_string()\fP, \fIf_string_append()\fP, \fIf_string_dynamic_append()\fP, \fIf_conversion_number_signed_to_string()\fP, \fIf_string_append()\fP, \fIf_string_dynamic_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_run.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_run.3
new file mode 100644 (file)
index 0000000..9ccfd44
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_operate_process_run "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_run \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process.h>
+.sp
+\fBvoid fake_make_operate_process_run\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIas_shell\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute either the run operation or the shell operation.
+.PP
+This alters date_make.setting.state.status: F_data_not if arguments.used is 0.
+.PP
+Success results from: fake_make_operate_process_execute().
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B as_shell
+When TRUE, this is a shell operation. When FALSE, this is a run operation.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process.h\fP(3), \fIfake_make_operate_process\fP(3), \fIfake_make_operate_process_buffer_escape\fP(3), \fIfake_make_operate_process_execute\fP(3), \fIfake_make_operate_process_return\fP(3), \fIfake_make_operate_process_run\fP(3), \fIfake_make_operate_process_execute()\fP, \fIfake_make_operate_process_execute()\fP, \fIfake_make_operate_process_execute()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_break.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_break.3
new file mode 100644 (file)
index 0000000..4e459aa
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_process_type_break "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_break \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_break\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the break operations process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success but not breaking. F_signal_abort on normal break
+.PP
+F_signal_abort (with error bit) on break on error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_build.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_build.3
new file mode 100644 (file)
index 0000000..cc332ea
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_process_type_build "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_build \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_build\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the build operations process.
+.PP
+This alters data_make.main->setting.state.status: Success from: fake_build_operate()
+.PP
+Errors (with error bit) from: fake_build_operate()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_build_operate()\fP, \fIfake_build_operate()\fP, \fIfake_build_operate()\fP, \fIfake_make_operate_process_return()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_clean.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_clean.3
new file mode 100644 (file)
index 0000000..0166068
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_process_type_clean "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_clean \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_clean\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the clean operations process.
+.PP
+This alters data_make.main->setting.state.status: Success from: fake_clean_operate()
+.PP
+Errors (with error bit) from: fake_clean_operate()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_clean_operate()\fP, \fIfake_clean_operate()\fP, \fIfake_clean_operate()\fP, \fIfake_make_operate_process_return()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_compile.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_compile.3
new file mode 100644 (file)
index 0000000..864c2ed
--- /dev/null
@@ -0,0 +1,67 @@
+.TH fake_make_operate_process_type_compile "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_compile \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBint fake_make_operate_process_type_compile\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the define operation process.
+.PP
+This alters data_make.main->setting.state.status: Success from: fake_execute()
+.PP
+Errors (with error bit) from: fake_execute() Errors (with error bit) from: fake_make_operate_process_return()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the compile operation.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_execute()\fP, \fIfake_execute()\fP, \fIfake_make_operate_process_return()\fP, \fIfake_execute()\fP, \fIfake_make_operate_process_return()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_condition.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_condition.3
new file mode 100644 (file)
index 0000000..f7d6daa
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_operate_process_type_condition "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_condition \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_condition\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if, and, and or operations process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B state_process
+The operation and if-condition states.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_make_operate_process_type_if_define()\fP, \fIfake_make_operate_process_type_if_exist()\fP, \fIfake_make_operate_process_type_if_greater_if_lesser()\fP, \fIfake_make_operate_process_type_if_group()\fP, \fIfake_make_operate_process_type_if_is()\fP, \fIfake_make_operate_process_type_if_mode()\fP, \fIfake_make_operate_process_type_if_owner()\fP, \fIfake_make_operate_process_type_if_parameter()\fP, \fIfake_make_operate_process_type_if_define()\fP, \fIfake_make_operate_process_type_if_exist()\fP, \fIfake_make_operate_process_type_if_greater_if_lesser()\fP, \fIfake_make_operate_process_type_if_group()\fP, \fIfake_make_operate_process_type_if_is()\fP, \fIfake_make_operate_process_type_if_mode()\fP, \fIfake_make_operate_process_type_if_owner()\fP, \fIfake_make_operate_process_type_if_parameter()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_copy.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_copy.3
new file mode 100644 (file)
index 0000000..dc01971
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fake_make_operate_process_type_copy "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_copy\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIclone\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the copy and clone operation processes.
+.PP
+This modifies data.main.cache_map.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B clone
+If TRUE, perform a copy that is a clone (preserved timestamps, roles, and permissions). If FALSE, perforrm a normaly copy without preserving properties.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_directory_is()\fP, \fIf_file_clone()\fP, \fIf_file_copy()\fP, \fIf_file_name_base()\fP, \fIfl_directory_do()\fP, \fIfake_do_copy_action()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_define.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_define.3
new file mode 100644 (file)
index 0000000..4c77fb6
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_operate_process_type_define "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_define \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_define\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the define operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+Success from: f_environment_set().
+.PP
+Errors (with error bit) from: f_environment_set()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_environment_set()\fP, \fIf_environment_set()\fP, \fIf_environment_set()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_deletes.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_deletes.3
new file mode 100644 (file)
index 0000000..ad6b9a6
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fake_make_operate_process_type_deletes "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_deletes \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_deletes\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIall\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the delete and deletes operation processes.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B all
+If TRUE, then if the path is a directory, then recursively apply to all paths within the directory. If FALSE, then only apply to the given path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_remove()\fP, \fIf_file_stat()\fP, \fIf_directory_remove()\fP, \fIf_directory_remove_custom()\fP, \fIf_file_remove()\fP, \fIf_file_stat()\fP, \fIf_directory_remove()\fP, \fIf_directory_remove_custom()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_exit.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_exit.3
new file mode 100644 (file)
index 0000000..dc948a9
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_operate_process_type_exit "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_exit \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_exit\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the exit operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on unknown exit type (only success and failure are known). F_signal_quit to designate exit on success.
+.PP
+F_failure (with error bit) on any error. F_signal_quit (with error bit) to designate exit on failure.
+.PP
+F_failure (with error bit) on any error. F_signal_quit (with error bit) to designate exit on failure.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on unknown exit type (only success and failure are known). F_signal_quit to designate exit on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_fail.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_fail.3
new file mode 100644 (file)
index 0000000..e514352
--- /dev/null
@@ -0,0 +1,62 @@
+.TH fake_make_operate_process_type_fail "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_fail \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_fail\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the fail operation process.
+.PP
+This does not alter data_make.main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_groups.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_groups.3
new file mode 100644 (file)
index 0000000..a5e78eb
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_operate_process_type_groups "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_groups \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_groups\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIall\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the group and groups operation processes.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B all
+If TRUE, then if the path is a directory, then recursively apply to all paths within the directory. If FALSE, then only apply to the given path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_role_change()\fP, \fIfll_file_role_change_all()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_get_id()\fP, \fIf_file_role_change()\fP, \fIfll_file_role_change_all()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_get_id()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_define.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_define.3
new file mode 100644 (file)
index 0000000..de1a870
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fake_make_operate_process_type_if_define "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_define \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_define\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if define operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_exist.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_exist.3
new file mode 100644 (file)
index 0000000..ae68da5
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fake_make_operate_process_type_if_exist "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_exist \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_exist\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if exists operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_exists()\fP, \fIf_file_exists()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_greater_if_lesser.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_greater_if_lesser.3
new file mode 100644 (file)
index 0000000..29aa49f
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_operate_process_type_if_greater_if_lesser "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_greater_if_lesser \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_greater_if_lesser\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if >, >=, <, and <= operation processes.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfl_conversion_dynamic_partial_to_unsigned_detect()\fP, \fIfl_conversion_dynamic_partial_to_unsigned_detect()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_group.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_group.3
new file mode 100644 (file)
index 0000000..7324756
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fake_make_operate_process_type_if_group "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_group \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_group\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if group operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_group_read()\fP, \fIfake_make_get_id()\fP, \fIf_file_group_read()\fP, \fIfake_make_get_id()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_is.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_is.3
new file mode 100644 (file)
index 0000000..d6dfd7c
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fake_make_operate_process_type_if_is "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_is \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_is\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if is operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_mode_read()\fP, \fIf_file_mode_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_mode.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_mode.3
new file mode 100644 (file)
index 0000000..42e1d83
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fake_make_operate_process_type_if_mode "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_mode \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_mode\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_mode_read()\fP, \fIf_file_mode_to_mode()\fP, \fIfake_make_get_id_mode()\fP, \fIf_file_mode_read()\fP, \fIf_file_mode_to_mode()\fP, \fIfake_make_get_id_mode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_owner.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_owner.3
new file mode 100644 (file)
index 0000000..5d901b2
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fake_make_operate_process_type_if_owner "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_owner \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_owner\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if owner operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_owner_read()\fP, \fIfake_make_get_id()\fP, \fIf_file_owner_read()\fP, \fIfake_make_get_id()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_parameter.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_if_parameter.3
new file mode 100644 (file)
index 0000000..41bf63b
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fake_make_operate_process_type_if_parameter "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_if_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_if_parameter\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIif_not\fP,
+    \fBfake_state_process_t   *\fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if parameter operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B if_not
+When TRUE, perform the if not is. When FALSE, perform the if is.
+
+.TP
+.B state_process
+The operation process state.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_index.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_index.3
new file mode 100644 (file)
index 0000000..a2ae51b
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fake_make_operate_process_type_index "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_index \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBint fake_make_operate_process_type_index\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the index operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+Success from: fake_make_operate_process_return().
+.PP
+Errors (with error bit) from: fake_execute() Errors (with error bit) from: fake_make_operate_process_return()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the index operation.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_make_operate_process_return()\fP, \fIfake_execute()\fP, \fIfake_make_operate_process_return()\fP, \fIfake_execute()\fP, \fIfake_make_operate_process_return()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_link.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_link.3
new file mode 100644 (file)
index 0000000..65729be
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_operate_process_type_link "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_link \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_link\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the link operation processes.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+Errors (with error bit) from: f_file_link()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_link()\fP, \fIf_file_link()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_modes.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_modes.3
new file mode 100644 (file)
index 0000000..23152d1
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_operate_process_type_modes "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_modes \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_modes\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIall\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the mode and modes operation processes.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B all
+If TRUE, then if the path is a directory, then recursively apply to all paths within the directory. If FALSE, then only apply to the given path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_mode_determine()\fP, \fIf_file_mode_read()\fP, \fIf_file_mode_set()\fP, \fIfll_file_mode_set_all()\fP, \fIfake_make_get_id_mode()\fP, \fIf_file_mode_determine()\fP, \fIf_file_mode_read()\fP, \fIf_file_mode_set()\fP, \fIfll_file_mode_set_all()\fP, \fIfake_make_get_id_mode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_move.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_move.3
new file mode 100644 (file)
index 0000000..b18b873
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fake_make_operate_process_type_move "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_move \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_move\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the move operation process.
+.PP
+This modifies data.main.cache_argument.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+Errors (with error bit) from: f_directory_is() Errors (with error bit) from: f_file_name_base() Errors (with error bit) from: f_file_rename()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_directory_is()\fP, \fIf_file_name_base()\fP, \fIf_file_rename()\fP, \fIf_directory_is()\fP, \fIf_file_name_base()\fP, \fIf_file_rename()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_operate.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_operate.3
new file mode 100644 (file)
index 0000000..6c0802e
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_operate_process_type_operate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_operate \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBint fake_make_operate_process_type_operate\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBf_number_unsigneds_t *const \fP\fIsection_stack\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the operate operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B section_stack
+The current operation stack.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the section operation.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_make_operate_section()\fP, \fIfake_make_operate_section()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_owners.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_owners.3
new file mode 100644 (file)
index 0000000..a7f8f73
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_operate_process_type_owners "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_owners \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_owners\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst uint8_t           \fP\fIall\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the owner and owners operation processes.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B all
+If TRUE, then if the path is a directory, then recursively apply to all paths within the directory. If FALSE, then only apply to the given path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_role_change()\fP, \fIfll_file_role_change_all()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_get_id()\fP, \fIf_file_role_change()\fP, \fIfll_file_role_change_all()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_get_id()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_parameter.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_parameter.3
new file mode 100644 (file)
index 0000000..5134495
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_operate_process_type_parameter "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_parameter\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the parameter operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+Errors (with error bit) from: f_memory_array_resize()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_pop.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_pop.3
new file mode 100644 (file)
index 0000000..3bdac24
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fake_make_operate_process_type_pop "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_pop \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_pop\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the pop operation process.
+.PP
+Only call this function if the data_make.path.stack.used is greater than 1. This does not validate the size of the stack.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_path_change() Errors (with error bit) from: f_memory_array_resize() Errors (with error bit) from: fake_make_path_relative()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_path_change()\fP, \fIf_memory_array_resize()\fP, \fIfake_make_path_relative()\fP, \fIf_path_change()\fP, \fIf_memory_array_resize()\fP, \fIfake_make_path_relative()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_print.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_print.3
new file mode 100644 (file)
index 0000000..f642b72
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_process_type_print "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_print \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_print\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the print operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file. This resets and uses data_make.cache_1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIfake_make_operate_process_buffer_escape()\fP, \fIf_memory_array_increase_by()\fP, \fIf_string_dynamic_append()\fP, \fIfake_make_operate_process_buffer_escape()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_skeleton.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_skeleton.3
new file mode 100644 (file)
index 0000000..077796f
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fake_make_operate_process_type_skeleton "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_skeleton \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_skeleton\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the skeleton operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: fake_make_operate_process_return() Errors (with error bit) from: fake_skeleton_operate()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIfake_make_operate_process_return()\fP, \fIfake_skeleton_operate()\fP, \fIfake_make_operate_process_return()\fP, \fIfake_skeleton_operate()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_to.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_to.3
new file mode 100644 (file)
index 0000000..54704b0
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_operate_process_type_to "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_to \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_to\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the to operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+Errors (with error bit) from: f_memory_array_increase_by() Errors (with error bit) from: f_path_change() Errors (with error bit) from: f_string_dynamic_append() Errors (with error bit) from: fake_make_assure_inside_project() Errors (with error bit) from: fake_make_path_relative()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_memory_array_increase_by()\fP, \fIf_path_change()\fP, \fIf_string_dynamic_append()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_path_relative()\fP, \fIf_memory_array_increase_by()\fP, \fIf_path_change()\fP, \fIf_string_dynamic_append()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_path_relative()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_top.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_top.3
new file mode 100644 (file)
index 0000000..adafe05
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fake_make_operate_process_type_top "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_top \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_top\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the top operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_path_change_at() Errors (with error bit) from: f_memory_array_resize()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_path_change_at()\fP, \fIf_memory_array_resize()\fP, \fIf_path_change_at()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_touch.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_touch.3
new file mode 100644 (file)
index 0000000..3006f56
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fake_make_operate_process_type_touch "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_touch \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_touch\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the touch operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_directory_touch() Errors (with error bit) from: f_file_touch()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_directory_touch()\fP, \fIf_file_touch()\fP, \fIf_directory_touch()\fP, \fIf_file_touch()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_write.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_process_type_write.3
new file mode 100644 (file)
index 0000000..f493165
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fake_make_operate_process_type_write "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_process_type_write \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_process_type.h>
+.sp
+\fBvoid fake_make_operate_process_type_write\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the write operation process.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_file_exists() Errors (with error bit) from: f_file_stream_open() Errors (with error bit) from: f_file_stream_write()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file. This resets and uses data_make.cache_1.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_process_type.h\fP(3), \fIfake_make_operate_process_type_break\fP(3), \fIfake_make_operate_process_type_build\fP(3), \fIfake_make_operate_process_type_clean\fP(3), \fIfake_make_operate_process_type_compile\fP(3), \fIfake_make_operate_process_type_condition\fP(3), \fIfake_make_operate_process_type_copy\fP(3), \fIfake_make_operate_process_type_define\fP(3), \fIfake_make_operate_process_type_deletes\fP(3), \fIfake_make_operate_process_type_exit\fP(3), \fIfake_make_operate_process_type_fail\fP(3), \fIfake_make_operate_process_type_groups\fP(3), \fIfake_make_operate_process_type_if_define\fP(3), \fIfake_make_operate_process_type_if_exist\fP(3), \fIfake_make_operate_process_type_if_greater_if_lesser\fP(3), \fIfake_make_operate_process_type_if_group\fP(3), \fIfake_make_operate_process_type_if_is\fP(3), \fIfake_make_operate_process_type_if_mode\fP(3), \fIfake_make_operate_process_type_if_owner\fP(3), \fIfake_make_operate_process_type_if_parameter\fP(3), \fIfake_make_operate_process_type_index\fP(3), \fIfake_make_operate_process_type_link\fP(3), \fIfake_make_operate_process_type_modes\fP(3), \fIfake_make_operate_process_type_move\fP(3), \fIfake_make_operate_process_type_operate\fP(3), \fIfake_make_operate_process_type_owners\fP(3), \fIfake_make_operate_process_type_parameter\fP(3), \fIfake_make_operate_process_type_pop\fP(3), \fIfake_make_operate_process_type_print\fP(3), \fIfake_make_operate_process_type_skeleton\fP(3), \fIfake_make_operate_process_type_to\fP(3), \fIfake_make_operate_process_type_top\fP(3), \fIfake_make_operate_process_type_touch\fP(3), \fIfake_make_operate_process_type_write\fP(3), \fIf_file_exists()\fP, \fIf_file_stream_open()\fP, \fIf_file_stream_write()\fP, \fIf_file_exists()\fP, \fIf_file_stream_open()\fP, \fIf_file_stream_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_section.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_section.3
new file mode 100644 (file)
index 0000000..587181e
--- /dev/null
@@ -0,0 +1,100 @@
+.TH fake_make_operate_section "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_section \-
+.SH SYNOPSIS
+.nf
+.B #include <operate.h>
+.sp
+\fBint fake_make_operate_section\fP(
+    \fBfake_make_data_t *const   \fP\fIdata_make\fP,
+    \fBconst f_number_unsigned_t \fP\fIid_section\fP,
+    \fBf_number_unsigneds_t     *\fP\fIsection_stack\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the make operations within the given section.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success. F_child on child process exiting. F_signal_abort on abort signal received. F_signal_quit on quit signal received.
+.PP
+F_failure (with error bit) on failure. F_interrupt (with error bit) on interrupt signal received. F_parameter (with error bit) on invalid parameter. F_recurse (with error bit) is returned if unable to recurse to another operation section (usually max stack depth reached). F_valid_not (with error bit) is returned if any part of the section is invalid, such as an invalid operation name.
+.PP
+Errors (with error bit) from: f_memory_array_increase()
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B id_section
+The array location id within the fakefile of the section to operate on.
+
+.TP
+.B section_stack
+The current operation stack.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The return code of the execution process. This generally is only needed when F_child is returned, where this holds the return status of the child process.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate.h\fP(3), \fIfake_make_operate\fP(3), \fIfake_make_operate_expand\fP(3), \fIfake_make_operate_expand_build\fP(3), \fIfake_make_operate_expand_context\fP(3), \fIfake_make_operate_expand_environment\fP(3), \fIfake_make_operate_section\fP(3), \fIf_memory_array_increase()\fP, \fIfake_make_operate_block_postprocess()\fP, \fIfake_make_operate_block_prepare()\fP, \fIfake_make_operate_expand()\fP, \fIfake_make_operate_process()\fP, \fIfake_make_operate_validate()\fP, \fIf_memory_array_increase()\fP, \fIfake_make_operate_block_postprocess()\fP, \fIfake_make_operate_block_prepare()\fP, \fIfake_make_operate_expand()\fP, \fIfake_make_operate_process()\fP, \fIfake_make_operate_validate()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate.3
new file mode 100644 (file)
index 0000000..7bb4ea7
--- /dev/null
@@ -0,0 +1,146 @@
+.TH fake_make_operate_validate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate.h>
+.sp
+\fBvoid fake_make_operate_validate\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBconst f_range_t             \fP\fIsection_name\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP,
+    \fBf_number_unsigneds_t *const \fP\fIsection_stack\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+For a given make section operation, validate the given operation.
+.PP
+This performs pre-operation validations. Additional issues may occure when running operations that are not detected nor detectable by this.
+.PP
+This alters data_make.main->setting.status: F_okay on success.
+.PP
+F_parameter (with error bit) on invalid parameter.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B section_name
+The section name.
+
+.TP
+.B state_process
+The operation and if-condition operation states. This condition will be updated by this as appropriate.
+
+.TP
+.B section_stack
+The current operation stack.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate.h\fP(3), \fIfake_make_operate_validate\fP(3), \fIfake_make_operate_validate_define_name\fP(3), \fIfake_make_operate_validate_type_break()\fP, \fIfake_make_operate_validate_type_build()\fP, \fIfake_make_operate_validate_type_clean_top_skeleton()\fP, \fIfake_make_operate_validate_type_clone()\fP, \fIfake_make_operate_validate_type_compile()\fP, \fIfake_make_operate_validate_type_copy()\fP, \fIfake_make_operate_validate_type_define()\fP, \fIfake_make_operate_validate_type_delete()\fP, \fIfake_make_operate_validate_type_else()\fP, \fIfake_make_operate_validate_type_exit()\fP, \fIfake_make_operate_validate_type_exit()\fP, \fIfake_make_operate_validate_type_permission()\fP, \fIfake_make_operate_validate_type_condition()\fP, \fIfake_make_operate_validate_type_index()\fP, \fIfake_make_operate_validate_type_link()\fP, \fIfake_make_operate_validate_type_move()\fP, \fIfake_make_operate_validate_type_operate()\fP, \fIfake_make_operate_validate_type_run()\fP, \fIfake_make_operate_validate_type_parameter()\fP, \fIfake_make_operate_validate_type_pop()\fP, \fIfake_make_operate_validate_type_to()\fP, \fIfake_make_operate_validate_type_touch()\fP, \fIfake_make_operate_validate_type_write()\fP, \fIfake_make_operate_validate_type_break()\fP, \fIfake_make_operate_validate_type_build()\fP, \fIfake_make_operate_validate_type_clean_top_skeleton()\fP, \fIfake_make_operate_validate_type_clone()\fP, \fIfake_make_operate_validate_type_compile()\fP, \fIfake_make_operate_validate_type_copy()\fP, \fIfake_make_operate_validate_type_define()\fP, \fIfake_make_operate_validate_type_delete()\fP, \fIfake_make_operate_validate_type_else()\fP, \fIfake_make_operate_validate_type_exit()\fP, \fIfake_make_operate_validate_type_exit()\fP, \fIfake_make_operate_validate_type_permission()\fP, \fIfake_make_operate_validate_type_condition()\fP, \fIfake_make_operate_validate_type_index()\fP, \fIfake_make_operate_validate_type_link()\fP, \fIfake_make_operate_validate_type_move()\fP, \fIfake_make_operate_validate_type_operate()\fP, \fIfake_make_operate_validate_type_run()\fP, \fIfake_make_operate_validate_type_parameter()\fP, \fIfake_make_operate_validate_type_pop()\fP, \fIfake_make_operate_validate_type_to()\fP, \fIfake_make_operate_validate_type_touch()\fP, \fIfake_make_operate_validate_type_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_define_name.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_define_name.3
new file mode 100644 (file)
index 0000000..5c9fca0
--- /dev/null
@@ -0,0 +1,62 @@
+.TH fake_make_operate_validate_define_name "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_define_name \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate.h>
+.sp
+\fBf_status_t fake_make_operate_validate_define_name\fP(
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Validate that the given define variable name is valid.
+.PP
+A valid define variable name must begin with an alpha-character or an underscore. Every character after that may be alphanumeric or underscore. All other characters, including Unicode characters, are invalid.
+.SH PARAMETERS
+.TP
+.B name
+The variable name string to validate.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_data_not if there is no string to validate (used = 0). F_true on valid. F_false on invalid.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate.h\fP(3), \fIfake_make_operate_validate\fP(3), \fIfake_make_operate_validate_define_name\fP(3), \fIisalnum()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_break.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_break.3
new file mode 100644 (file)
index 0000000..ef1087a
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_break "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_break \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_break\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+erform the break operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_build.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_build.3
new file mode 100644 (file)
index 0000000..e561ee0
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_build "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_build \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_build\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the build operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_clean_top_skeleton.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_clean_top_skeleton.3
new file mode 100644 (file)
index 0000000..f916475
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_clean_top_skeleton "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_clean_top_skeleton \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_clean_top_skeleton\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the clean, top, and skeleton operations validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_clone.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_clone.3
new file mode 100644 (file)
index 0000000..8f9e7ee
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_clone "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_clone \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_clone\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the clone operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIf_directory_is()\fP, \fIfake_make_assure_inside_project()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_compile.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_compile.3
new file mode 100644 (file)
index 0000000..c264c6b
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_compile "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_compile \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_compile\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the compile operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_condition.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_condition.3
new file mode 100644 (file)
index 0000000..95d8b6d
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_operate_validate_type_condition "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_condition \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_condition\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the if, and, and or operations validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B state_process
+The operation and if-condition operation states. This condition will be updated by this as appropriate.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIf_file_exists()\fP, \fIfake_make_assure_inside_project()\fP, \fIfake_make_get_id()\fP, \fIfake_make_get_id_mode()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_copy.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_copy.3
new file mode 100644 (file)
index 0000000..ff62fb5
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_copy "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_copy\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the copy and clone operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIf_directory_is()\fP, \fIf_file_exists()\fP, \fIfake_make_assure_inside_project()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_define.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_define.3
new file mode 100644 (file)
index 0000000..adf66d3
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_define "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_define \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_define\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the define operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIfake_make_operate_validate_define_name()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_delete.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_delete.3
new file mode 100644 (file)
index 0000000..c3bbd69
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_delete\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the delete and deletes operations validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIfake_make_assure_inside_project()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_else.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_else.3
new file mode 100644 (file)
index 0000000..9a06838
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_operate_validate_type_else "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_else \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_else\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the else operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B state_process
+The operation and if-condition operation states. This condition will be updated by this as appropriate.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_exit.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_exit.3
new file mode 100644 (file)
index 0000000..4086482
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_exit "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_exit \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_exit\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the exit operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_fail.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_fail.3
new file mode 100644 (file)
index 0000000..017722a
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_fail "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_fail \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_fail\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the else operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_index.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_index.3
new file mode 100644 (file)
index 0000000..40f0d2c
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_index "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_index \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_index\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the index operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_link.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_link.3
new file mode 100644 (file)
index 0000000..04c9150
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_link "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_link \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_link\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the link operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_move.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_move.3
new file mode 100644 (file)
index 0000000..7802954
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_move "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_move \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_move\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the move operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIf_file_name_directory()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append_assure()\fP, \fIfake_make_assure_inside_project()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_operate.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_operate.3
new file mode 100644 (file)
index 0000000..1ab5a49
--- /dev/null
@@ -0,0 +1,90 @@
+.TH fake_make_operate_validate_type_operate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_operate \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_operate\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBf_number_unsigneds_t *const \fP\fIsection_stack\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the operate operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B section_stack
+The current operation stack.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_parameter.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_parameter.3
new file mode 100644 (file)
index 0000000..df283c2
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_parameter "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_parameter\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the touch operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_permission.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_permission.3
new file mode 100644 (file)
index 0000000..839e32d
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_make_operate_validate_type_permission "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_permission \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_permission\fP(
+    \fBfake_make_data_t *const     \fP\fIdata_make\fP,
+    \fBfake_state_process_t *const \fP\fIstate_process\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the goup, groups, mode, modes, owner, and owners operations validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.TP
+.B state_process
+The operation and if-condition operation states. This condition will be updated by this as appropriate.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure for managing the operation and if-condition states.
+.PP
+success_block: Current block state is considered success when F_true and failure when F_false.
+.sp
+.RS
+.nf
+\fB
+struct fake_state_process_t {
+  uint8_t  \fIblock\fP;
+  uint8_t  \fIblock_result\fP;
+  uint8_t  \fIcondition\fP;
+  uint8_t  \fIcondition_result\fP;
+  uint8_t  \fIoperation\fP;
+  uint8_t  \fIoperation_previous\fP;
+  uint8_t  \fIsuccess\fP;
+  uint8_t  \fIsuccess_block\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIf_file_is()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_pop.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_pop.3
new file mode 100644 (file)
index 0000000..0f8c270
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_pop "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_pop \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_pop\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the pop operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_run.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_run.3
new file mode 100644 (file)
index 0000000..0ec9988
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_run "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_run \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_run\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the run and shell operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_to.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_to.3
new file mode 100644 (file)
index 0000000..4e6ee41
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_to "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_to \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_to\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the to operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIf_file_is()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_touch.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_touch.3
new file mode 100644 (file)
index 0000000..322cfed
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_touch "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_touch \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_touch\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the touch operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIfake_make_assure_inside_project()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_write.3 b/level_3/fake/data/documentation/man/man3/fake_make_operate_validate_type_write.3
new file mode 100644 (file)
index 0000000..a7b0e10
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_make_operate_validate_type_write "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_operate_validate_type_write \-
+.SH SYNOPSIS
+.nf
+.B #include <operate_validate_type.h>
+.sp
+\fBvoid fake_make_operate_validate_type_write\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the touch operation validation.
+.PP
+This alters data_make.main->setting.state: F_okay on success.
+.PP
+F_failure (with error bit) on any error.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperate_validate_type.h\fP(3), \fIfake_make_operate_validate_type_break\fP(3), \fIfake_make_operate_validate_type_build\fP(3), \fIfake_make_operate_validate_type_clean_top_skeleton\fP(3), \fIfake_make_operate_validate_type_clone\fP(3), \fIfake_make_operate_validate_type_compile\fP(3), \fIfake_make_operate_validate_type_condition\fP(3), \fIfake_make_operate_validate_type_copy\fP(3), \fIfake_make_operate_validate_type_define\fP(3), \fIfake_make_operate_validate_type_delete\fP(3), \fIfake_make_operate_validate_type_else\fP(3), \fIfake_make_operate_validate_type_exit\fP(3), \fIfake_make_operate_validate_type_fail\fP(3), \fIfake_make_operate_validate_type_index\fP(3), \fIfake_make_operate_validate_type_link\fP(3), \fIfake_make_operate_validate_type_move\fP(3), \fIfake_make_operate_validate_type_operate\fP(3), \fIfake_make_operate_validate_type_parameter\fP(3), \fIfake_make_operate_validate_type_permission\fP(3), \fIfake_make_operate_validate_type_pop\fP(3), \fIfake_make_operate_validate_type_run\fP(3), \fIfake_make_operate_validate_type_to\fP(3), \fIfake_make_operate_validate_type_touch\fP(3), \fIfake_make_operate_validate_type_write\fP(3), \fIfake_make_assure_inside_project()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_path_relative.3 b/level_3/fake/data/documentation/man/man3/fake_make_path_relative.3
new file mode 100644 (file)
index 0000000..afe55b1
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_path_relative "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_path_relative \-
+.SH SYNOPSIS
+.nf
+.B #include <make.h>
+.sp
+\fBvoid fake_make_path_relative\fP(
+    \fBfake_make_data_t *const \fP\fIdata_make\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get a path, relative to the project root.
+.PP
+This alters data_make.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with error bit) on any error. F_parameter (with error bit) on invalid parameter.
+.SH PARAMETERS
+.TP
+.B data_make
+All make related setting data, including data from the fakefile and the build settings file. The relative path is stored in data_make.cache_path.
+
+.TP
+.B path
+The NULL terminated path to get the relative path of.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The control data.
+.PP
+data: The Fake make program data.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_data_t {
+  fake_build_setting_t  \fIsetting_build\fP;
+  fake_make_setting_t   \fIsetting_make\fP;
+  f_string_maps_t       \fIenvironment\fP;
+  fake_make_parameter_t \fIparameter\fP;
+  fake_make_parameter_t \fIparameter_option\fP;
+  fake_make_parameter_t \fIparameter_value\fP;
+  fake_make_path_t      \fIpath\fP;
+  fl_print_t            \fIerror\fP;
+  f_fss_nameds_t        \fIfakefile\fP;
+  f_number_unsigned_t   \fIid_main\fP;
+  fake_main_t          *\fImain\fP;
+  fake_data_t          *\fIdata\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImake.h\fP(3), \fIfake_make_assure_inside_project\fP(3), \fIfake_make_get_id\fP(3), \fIfake_make_get_id_mode\fP(3), \fIfake_make_path_relative\fP(3), \fIf_file_mode_from_string()\fP, \fIf_string_dynamic_partial_append()\fP, \fIf_string_dynamic_terminate()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition.3
new file mode 100644 (file)
index 0000000..a82835c
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_print_error_after_condition "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_after_condition \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_after_condition\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fImessage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about how using something after a condition statement.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B message
+The message describing how in relation to the after condition.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_may_only.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_may_only.3
new file mode 100644 (file)
index 0000000..3edbb26
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_after_condition_may_only "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_after_condition_may_only \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_after_condition_may_only\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about how using something after a condition statement, for the "may only" case.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_must_not.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_must_not.3
new file mode 100644 (file)
index 0000000..21a2dc1
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_after_condition_must_not "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_after_condition_must_not \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_after_condition_must_not\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about how using something after a condition statement, for the "must not" case.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_no_preceding.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_after_condition_no_preceding.3
new file mode 100644 (file)
index 0000000..54af3c3
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_after_condition_no_preceding "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_after_condition_no_preceding \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_after_condition_no_preceding\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about how using something after a condition statement, for the "no preceding" case.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_argument_invalid_section.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_argument_invalid_section.3
new file mode 100644 (file)
index 0000000..8cf07f7
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fake_make_print_error_argument_invalid_section "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_argument_invalid_section \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_argument_invalid_section\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a define setting containing an invalid character.
+.PP
+These only allow valid characters in an environment variable name.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The invalid section name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_compiler_not_specified.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_compiler_not_specified.3
new file mode 100644 (file)
index 0000000..37791bc
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_error_compiler_not_specified "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_compiler_not_specified \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_compiler_not_specified\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIaction\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a compiler not being specified.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B action
+The action that cannot be performed due to a lack of a compiler.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_content_not_directory.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_content_not_directory.3
new file mode 100644 (file)
index 0000000..c3346ad
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fake_make_print_error_content_not_directory "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_content_not_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_content_not_directory\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIcontent\fP,
+    \fBconst f_string_static_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about the second file not being of a directory.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B content
+A string representing which content.
+
+.TP
+.B file
+The second content that should be a directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_define_invalid_character.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_define_invalid_character.3
new file mode 100644 (file)
index 0000000..512e4fe
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fake_make_print_error_define_invalid_character "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_define_invalid_character \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_define_invalid_character\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a define setting containing an invalid character.
+.PP
+These only allow valid characters in an environment variable name.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the variable containing one or more invalid characters.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_define_name_empty.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_define_name_empty.3
new file mode 100644 (file)
index 0000000..e7ce679
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_define_name_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_define_name_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_define_name_empty\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a define name being an empty string.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_fakefile_section_missing.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_fakefile_section_missing.3
new file mode 100644 (file)
index 0000000..d43cf83
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_make_print_error_fakefile_section_missing "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_fakefile_section_missing \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_fakefile_section_missing\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfakefile\fP,
+    \fBconst f_string_static_t \fP\fIsection\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a given fakefile missing a section.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.TP
+.B section
+The name of the missing section.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_file_name_empty.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_file_name_empty.3
new file mode 100644 (file)
index 0000000..6951061
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_file_name_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_file_name_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_file_name_empty\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a file name being an empty string.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_file_type.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_file_type.3
new file mode 100644 (file)
index 0000000..1cb279f
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_make_print_error_file_type "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_file_type \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_file_type\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fItype\fP,
+    \fBconst f_string_static_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a file not being of a specific type.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B type
+The expected type of the file.
+
+.TP
+.B file
+The file path or name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_indexer_not_specified.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_indexer_not_specified.3
new file mode 100644 (file)
index 0000000..5640329
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_error_indexer_not_specified "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_indexer_not_specified \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_indexer_not_specified\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIaction\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a indexer not being specified.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B action
+The action that cannot be performed due to a lack of a compiler.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_incomplete.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_incomplete.3
new file mode 100644 (file)
index 0000000..4502803
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_print_error_operation_incomplete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_operation_incomplete \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_operation_incomplete\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fIoperation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about an incomplete operation at the end of a section.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B operation
+The code of the operation.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_recursion.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_recursion.3
new file mode 100644 (file)
index 0000000..c85cbae
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fake_make_print_error_operation_recursion "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_operation_recursion \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_operation_recursion\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about an operation recursion not being allowed.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+
+.TP
+.B buffer
+The buffer containing the range to use.
+
+.TP
+.B range
+The range within the buffer representing the operation name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_section_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_operation_section_not_found.3
new file mode 100644 (file)
index 0000000..abbb9e0
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_error_operation_section_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_operation_section_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_operation_section_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about an operation section not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the operation.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_out_of_range_number.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_out_of_range_number.3
new file mode 100644 (file)
index 0000000..bbbaa81
--- /dev/null
@@ -0,0 +1,104 @@
+.TH fake_make_print_error_out_of_range_number "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_out_of_range_number \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_out_of_range_number\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fInumber\fP,
+    \fBconst f_number_unsigned_t \fP\fIminimum\fP,
+    \fBconst f_number_unsigned_t \fP\fImaximum\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about number being out of range.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B number
+The string representing the number.
+
+.TP
+.B minimum
+The minimum number allowed, represented as a negative.
+
+.TP
+.B maximum
+The number allowed, represented as a positive.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_pop_last_path.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_pop_last_path.3
new file mode 100644 (file)
index 0000000..e114408
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_pop_last_path "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_pop_last_path \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_pop_last_path\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about attempting to pop last path off the project path stack.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_program_failed.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_program_failed.3
new file mode 100644 (file)
index 0000000..b41f4ee
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_print_error_program_failed "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_program_failed \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_program_failed\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst int         \fP\fIreturn_code\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about program failed.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B return_code
+The return code from the program.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_program_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_program_not_found.3
new file mode 100644 (file)
index 0000000..e0d4e50
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_error_program_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_program_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_program_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIprogram\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about program not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B program
+The program name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_reserved_parameter_name.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_reserved_parameter_name.3
new file mode 100644 (file)
index 0000000..1f17cb6
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_error_reserved_parameter_name "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_reserved_parameter_name \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_reserved_parameter_name\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about attempting to assign to a reserved parameter name.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The reserved parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_target_file_name_empty.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_target_file_name_empty.3
new file mode 100644 (file)
index 0000000..b145aee
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_make_print_error_target_file_name_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_target_file_name_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_target_file_name_empty\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about a target file name being an empty string.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_unsupported_number.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_unsupported_number.3
new file mode 100644 (file)
index 0000000..09a56c8
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_error_unsupported_number "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_unsupported_number \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_unsupported_number\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about number not being supported.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B number
+The string representing the number.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_error_unsupported_type.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_error_unsupported_type.3
new file mode 100644 (file)
index 0000000..92d69a0
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_make_print_error_unsupported_type "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_error_unsupported_type \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_make_print_error_unsupported_type\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fItype\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error about type not being supported.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B type
+The string representing the type.
+
+.TP
+.B value
+The value that is unsupported for the type.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_make_print_error_after_condition\fP(3), \fIfake_make_print_error_after_condition_may_only\fP(3), \fIfake_make_print_error_after_condition_must_not\fP(3), \fIfake_make_print_error_after_condition_no_preceding\fP(3), \fIfake_make_print_error_argument_invalid_section\fP(3), \fIfake_make_print_error_compiler_not_specified\fP(3), \fIfake_make_print_error_content_not_directory\fP(3), \fIfake_make_print_error_define_invalid_character\fP(3), \fIfake_make_print_error_define_name_empty\fP(3), \fIfake_make_print_error_fakefile_section_missing\fP(3), \fIfake_make_print_error_file_name_empty\fP(3), \fIfake_make_print_error_file_type\fP(3), \fIfake_make_print_error_indexer_not_specified\fP(3), \fIfake_make_print_error_operation_incomplete\fP(3), \fIfake_make_print_error_operation_recursion\fP(3), \fIfake_make_print_error_operation_section_not_found\fP(3), \fIfake_make_print_error_out_of_range_number\fP(3), \fIfake_make_print_error_pop_last_path\fP(3), \fIfake_make_print_error_program_failed\fP(3), \fIfake_make_print_error_program_not_found\fP(3), \fIfake_make_print_error_reserved_parameter_name\fP(3), \fIfake_make_print_error_target_file_name_empty\fP(3), \fIfake_make_print_error_unsupported_number\fP(3), \fIfake_make_print_error_unsupported_type\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_message_now_making.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_message_now_making.3
new file mode 100644 (file)
index 0000000..268608b
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_message_now_making "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_message_now_making \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_make_print_message_now_making\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfakefile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the now making message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_make_print_message_now_making\fP(3), \fIfake_make_print_message_processing_section\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_message_processing_section.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_message_processing_section.3
new file mode 100644 (file)
index 0000000..7a0e5da
--- /dev/null
@@ -0,0 +1,121 @@
+.TH fake_make_print_message_processing_section "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_message_processing_section \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_make_print_message_processing_section\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_fss_named_t     \fP\fIsection\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the processing section message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B buffer
+The string containing the section name.
+
+.TP
+.B section
+The section structure containing the section name range.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This holds a named set of fss objects, contents, and quotess.
+.PP
+The objects, contents, and quotess should each be of the same used and size. Any deviation to this would require implementing custom equivelents to the standard management macros.
+.PP
+quotess: The array of quote for each content.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_named_t {
+  f_range_t   \fIname\fP;
+  f_ranges_t  \fIobjects\fP;
+  f_rangess_t \fIcontents\fP;
+  f_uint8ss_t \fIquotess\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_make_print_message_now_making\fP(3), \fIfake_make_print_message_processing_section\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_break.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_break.3
new file mode 100644 (file)
index 0000000..f7d3ae9
--- /dev/null
@@ -0,0 +1,88 @@
+.TH fake_make_print_verbose_operate_break "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_break \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_break\fP(
+    \fBfl_print_t *const        \fP\fIprint\fP,
+    \fBconst f_string_statics_t \fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print operate break verbose message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B arguments
+The arguments where the first argument, if defined, is the exiting as string. Set arguments.used to 0 to use the default "success" exiting as string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_copy.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_copy.3
new file mode 100644 (file)
index 0000000..ef096a9
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fake_make_print_verbose_operate_copy "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_copy \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_copy\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst uint8_t           \fP\fIclone\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print operate copy verbose message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B clone
+If TRUE, then this is a clone operation. If FALSE< then this is a copy operation.
+
+.TP
+.B source
+The source to copy from.
+
+.TP
+.B destination
+The destination to copy to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_define.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_define.3
new file mode 100644 (file)
index 0000000..f7f86f7
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_verbose_operate_define "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_define \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_define\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print operate define verbose message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B variable
+The environment variable name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_delete.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_delete.3
new file mode 100644 (file)
index 0000000..87160bd
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_verbose_operate_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_delete\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print operate delete verbose message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path or file that is deleted.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_exiting_as.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_exiting_as.3
new file mode 100644 (file)
index 0000000..11b568c
--- /dev/null
@@ -0,0 +1,88 @@
+.TH fake_make_print_verbose_operate_exiting_as "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_exiting_as \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_exiting_as\fP(
+    \fBfl_print_t *const        \fP\fIprint\fP,
+    \fBconst f_string_statics_t \fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print operate exiting as verbose message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B arguments
+The arguments where the first argument, if defined, is the exiting as string. Set arguments.used to 0 to use the default "success" exiting as string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_file_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_file_not_found.3
new file mode 100644 (file)
index 0000000..12919ce
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fake_make_print_verbose_operate_file_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_file_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_file_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst uint8_t           \fP\fIis_directory\fP,
+    \fBconst f_string_static_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print operate file or directory not found verbose message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B is_directory
+If TRUE, then the file is type directory. If FALSE, then the file is type regular.
+
+.TP
+.B file
+The file or directory path or name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_program.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_program.3
new file mode 100644 (file)
index 0000000..992e14a
--- /dev/null
@@ -0,0 +1,118 @@
+.TH fake_make_print_verbose_operate_program "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_program \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_program\fP(
+    \fBfl_print_t *const        \fP\fIprint\fP,
+    \fBconst f_string_static_t  \fP\fIprogram\fP,
+    \fBconst f_string_statics_t \fP\fIarguments\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose program message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B program
+The program name.
+
+.TP
+.B arguments
+The arguments pass to the program.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_failure_state.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_failure_state.3
new file mode 100644 (file)
index 0000000..586cbbd
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_make_print_verbose_operate_set_failure_state "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_set_failure_state \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_set_failure_state\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fIfail\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about setting failure state.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fail
+The failure state code being set to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_mode.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_mode.3
new file mode 100644 (file)
index 0000000..1c810a5
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fake_make_print_verbose_operate_set_mode "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_set_mode \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_set_mode\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst mode_t            \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about setting the file mode.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The file path having the mode changed.
+
+.TP
+.B mode
+The mode being changed to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_path.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_path.3
new file mode 100644 (file)
index 0000000..7581a76
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_verbose_operate_set_path "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_set_path \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_set_path\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about changing the project path.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path being changed to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_role.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_set_role.3
new file mode 100644 (file)
index 0000000..8244ce0
--- /dev/null
@@ -0,0 +1,106 @@
+.TH fake_make_print_verbose_operate_set_role "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_set_role \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_set_role\fP(
+    \fBfl_print_t *const   \fP\fIprint\fP,
+    \fBconst uint8_t       \fP\fIwhat\fP,
+    \fBf_string_static_t   \fP\fIrole\fP,
+    \fBf_number_unsigned_t \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about setting owner or group.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B what
+0x2 = When set, print as Owner; When not set, print as Group.
+
+
+
+.TP
+.B role
+A string representing the owner or group name.
+
+.TP
+.B id
+The uid_t or gid_t representing the owner or group.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_symbolic_link.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_symbolic_link.3
new file mode 100644 (file)
index 0000000..5adae3d
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_make_print_verbose_operate_symbolic_link "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_symbolic_link \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_symbolic_link\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about create a symbolic link.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B source
+A string the symbolic link is from.
+
+.TP
+.B destination
+A string the symbolic link is to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_touch.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_verbose_operate_touch.3
new file mode 100644 (file)
index 0000000..7881704
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_verbose_operate_touch "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_verbose_operate_touch \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_make_print_verbose_operate_touch\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about touching a file.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The file path being touched.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_make_print_verbose_operate_break\fP(3), \fIfake_make_print_verbose_operate_copy\fP(3), \fIfake_make_print_verbose_operate_define\fP(3), \fIfake_make_print_verbose_operate_delete\fP(3), \fIfake_make_print_verbose_operate_exiting_as\fP(3), \fIfake_make_print_verbose_operate_file_not_found\fP(3), \fIfake_make_print_verbose_operate_program\fP(3), \fIfake_make_print_verbose_operate_set_failure_state\fP(3), \fIfake_make_print_verbose_operate_set_mode\fP(3), \fIfake_make_print_verbose_operate_set_path\fP(3), \fIfake_make_print_verbose_operate_set_role\fP(3), \fIfake_make_print_verbose_operate_symbolic_link\fP(3), \fIfake_make_print_verbose_operate_touch\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_cannot_change_back.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_cannot_change_back.3
new file mode 100644 (file)
index 0000000..2c871c9
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_warning_cannot_change_back "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_cannot_change_back \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_cannot_change_back\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message when unable to change back to original path.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path that cannot be changed back to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_environment_name_already_added.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_environment_name_already_added.3
new file mode 100644 (file)
index 0000000..1371fd6
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_warning_environment_name_already_added "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_environment_name_already_added \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_environment_name_already_added\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning about a setting name being already added.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the environment variable that is already added.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_environment_name_invalid.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_environment_name_invalid.3
new file mode 100644 (file)
index 0000000..9e0eb22
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_warning_environment_name_invalid "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_environment_name_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_environment_name_invalid\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning about a given environment name being invalid.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the environment variable that is invalid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_fakefile_empty.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_fakefile_empty.3
new file mode 100644 (file)
index 0000000..248d143
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_warning_fakefile_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_fakefile_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_fakefile_empty\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfakefile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning about a given fakefile being empty.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_file_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_file_not_found.3
new file mode 100644 (file)
index 0000000..57d75a4
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_make_print_warning_file_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_file_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_file_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning about a file not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B file
+The name or path of the file that is not found.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_empty.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_empty.3
new file mode 100644 (file)
index 0000000..b36ee24
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fake_make_print_warning_setting_content_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_setting_content_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_setting_content_empty\fP(
+    \fBfl_print_t *const        \fP\fIprint\fP,
+    \fBconst f_string_static_t  \fP\fIfakefile\fP,
+    \fBconst f_string_dynamic_t \fP\fIbuffer\fP,
+    \fBconst f_range_t          \fP\fIrange\fP,
+    \fBconst f_string_static_t  \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message when fake settings content is empty.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.TP
+.B buffer
+The buffer containing the loaded file content.
+
+.TP
+.B range
+The range within the buffer representing the object.
+
+.TP
+.B name
+The name of the setting that has an invalid value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_invalid.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_invalid.3
new file mode 100644 (file)
index 0000000..1a7f0ee
--- /dev/null
@@ -0,0 +1,179 @@
+.TH fake_make_print_warning_setting_content_invalid "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_setting_content_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_setting_content_invalid\fP(
+    \fBfl_print_t *const        \fP\fIprint\fP,
+    \fBconst f_string_static_t  \fP\fIfakefile\fP,
+    \fBconst f_string_dynamic_t \fP\fIbuffer\fP,
+    \fBconst f_range_t          \fP\fIobject\fP,
+    \fBconst f_range_t          \fP\fIcontent\fP,
+    \fBconst f_string_static_t  \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message when fake settings content is invalid.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.TP
+.B buffer
+The buffer containing the loaded file content.
+
+.TP
+.B object
+The range within the buffer representing the object.
+
+.TP
+.B content
+The range within the buffer representing the content.
+
+.TP
+.B name
+The name of the setting that has an invalid value.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_multiple.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_content_multiple.3
new file mode 100644 (file)
index 0000000..03326b5
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_make_print_warning_setting_content_multiple "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_setting_content_multiple \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_setting_content_multiple\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfakefile\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message when settings content has too many values.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.TP
+.B name
+The name of the content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_object_multiple.3 b/level_3/fake/data/documentation/man/man3/fake_make_print_warning_setting_object_multiple.3
new file mode 100644 (file)
index 0000000..9cdf00f
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_make_print_warning_setting_object_multiple "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_print_warning_setting_object_multiple \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_make_print_warning_setting_object_multiple\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIfakefile\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message when fakefile has too many objects with the same name.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B fakefile
+The name or path of the file that is empty.
+
+.TP
+.B name
+The name of the object.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_make_print_warning_cannot_change_back\fP(3), \fIfake_make_print_warning_environment_name_already_added\fP(3), \fIfake_make_print_warning_environment_name_invalid\fP(3), \fIfake_make_print_warning_fakefile_empty\fP(3), \fIfake_make_print_warning_file_not_found\fP(3), \fIfake_make_print_warning_setting_content_empty\fP(3), \fIfake_make_print_warning_setting_content_invalid\fP(3), \fIfake_make_print_warning_setting_content_multiple\fP(3), \fIfake_make_print_warning_setting_object_multiple\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_make_setting_delete.3 b/level_3/fake/data/documentation/man/man3/fake_make_setting_delete.3
new file mode 100644 (file)
index 0000000..5f88cff
--- /dev/null
@@ -0,0 +1,56 @@
+.TH fake_make_setting_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_make_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_make_setting_delete\fP(
+    \fBfake_make_setting_t *const \fP\fIsetting_make\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate make setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter data_make.main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting_make
+The make setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The make settings.
+.PP
+parameter: The parameters array map.
+.sp
+.RS
+.nf
+\fB
+struct fake_make_setting_t {
+  uint8_t               \fIload_build\fP;
+  uint8_t               \fIfail\fP;
+  f_string_dynamic_t    \fIstage\fP;
+  f_string_map_multis_t \fIparameter\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3), \fIf_memory_arrays_resize()\fP, \fIfake_build_setting_delete()\fP, \fIfake_make_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_path_generate.3 b/level_3/fake/data/documentation/man/man3/fake_path_generate.3
new file mode 100644 (file)
index 0000000..28722c4
--- /dev/null
@@ -0,0 +1,93 @@
+.TH fake_path_generate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_path_generate \-
+.SH SYNOPSIS
+.nf
+.B #include <path_generate.h>
+.sp
+\fBvoid fake_path_generate\fP(
+    \fBfake_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Generate all appropriate paths based on runtime information.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless(). Errors (with error bit) from: fake_path_generate_string_dynamic().
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath_generate.h\fP(3), \fIfake_path_generate\fP(3), \fIfake_path_generate_string_dynamic\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIfake_path_generate_string_dynamic()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIfake_path_generate_string_dynamic()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_path_generate_string_dynamic.3 b/level_3/fake/data/documentation/man/man3/fake_path_generate_string_dynamic.3
new file mode 100644 (file)
index 0000000..d0ae538
--- /dev/null
@@ -0,0 +1,109 @@
+.TH fake_path_generate_string_dynamic "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_path_generate_string_dynamic \-
+.SH SYNOPSIS
+.nf
+.B #include <path_generate.h>
+.sp
+\fBvoid fake_path_generate_string_dynamic\fP(
+    \fBfake_data_t *const       \fP\fIdata\fP,
+    \fBconst f_string_dynamic_t \fP\fIsource\fP,
+    \fBf_string_dynamic_t      *\fP\fIdestination\fP,
+    \fBconst uint8_t            \fP\fIsize\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Generate all appropriate paths based on runtime information from dynamic strings.
+.PP
+The given source is applied to each destination.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless().
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B source
+The string to copy from.
+
+.TP
+.B destination
+An array of pointers to the strings to append onto.
+
+.TP
+.B size
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIpath_generate.h\fP(3), \fIfake_path_generate\fP(3), \fIfake_path_generate_string_dynamic\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_pipe_buffer.3 b/level_3/fake/data/documentation/man/man3/fake_pipe_buffer.3
new file mode 100644 (file)
index 0000000..a93d648
--- /dev/null
@@ -0,0 +1,98 @@
+.TH fake_pipe_buffer "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_pipe_buffer \-
+.SH SYNOPSIS
+.nf
+.B #include <fake.h>
+.sp
+\fBvoid fake_pipe_buffer\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBf_string_dynamic_t *const \fP\fIbuffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the contents of the standard input pipe into the given buffer, handling all potential errors.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B buffer
+A buffer containing the contents of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfake.h\fP(3), \fIfake_execute\fP(3), \fIfake_file_buffer\fP(3), \fIfake_main\fP(3), \fIfake_pipe_buffer\fP(3), \fIfake_validate_parameter_paths\fP(3), \fIf_file_stream_read_block()\fP, \fIf_memory_array_increase_by()\fP, \fIf_file_stream_read_block()\fP, \fIf_memory_array_increase_by()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_common_simple.3 b/level_3/fake/data/documentation/man/man3/fake_print_common_simple.3
new file mode 100644 (file)
index 0000000..f4f9337
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_common_simple "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_common_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_print_common_simple\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fImessage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print simple message.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B message
+The message to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_print_common_simple\fP(3), \fIfake_print_common_simple_variable\fP(3), \fIfake_print_common_wrapped_variable\fP(3), \fIfake_print_common_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_common_simple_variable.3 b/level_3/fake/data/documentation/man/man3/fake_print_common_simple_variable.3
new file mode 100644 (file)
index 0000000..402a5f7
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fake_print_common_simple_variable "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_common_simple_variable \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_print_common_simple_variable\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fImessage\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print simple verbose message with a value.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B message
+The message to print.
+
+.TP
+.B variable
+The string representing the variable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_print_common_simple\fP(3), \fIfake_print_common_simple_variable\fP(3), \fIfake_print_common_wrapped_variable\fP(3), \fIfake_print_common_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_common_wrapped_variable.3 b/level_3/fake/data/documentation/man/man3/fake_print_common_wrapped_variable.3
new file mode 100644 (file)
index 0000000..d89546d
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fake_print_common_wrapped_variable "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_common_wrapped_variable \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_print_common_wrapped_variable\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print wrapped message with a value.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B variable
+The string representing the variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_print_common_simple\fP(3), \fIfake_print_common_simple_variable\fP(3), \fIfake_print_common_wrapped_variable\fP(3), \fIfake_print_common_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_common_wrapped_variables.3 b/level_3/fake/data/documentation/man/man3/fake_print_common_wrapped_variables.3
new file mode 100644 (file)
index 0000000..659ab99
--- /dev/null
@@ -0,0 +1,136 @@
+.TH fake_print_common_wrapped_variables "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_common_wrapped_variables \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_print_common_wrapped_variables\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIfirst\fP,
+    \fBconst f_string_t        \fP\fIbetween\fP,
+    \fBconst f_string_static_t \fP\fIsecond\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a wrapped message with a before string, a middle strng, an after string, and two string variables.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string.
+
+.TP
+.B first
+The string representing the first variable.
+
+.TP
+.B between
+The string being printed before the variable. Likely should have a space added at the start and end of the string.
+
+.TP
+.B second
+The string representing the second variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_print_common_simple\fP(3), \fIfake_print_common_simple_variable\fP(3), \fIfake_print_common_wrapped_variable\fP(3), \fIfake_print_common_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_important_simple.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_important_simple.3
new file mode 100644 (file)
index 0000000..0cef515
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_context_important_simple "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_important_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_important_simple\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fImessage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a simple message with context set to important but without prefix and suffix.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B message
+The string to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_important_simple_variable.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_important_simple_variable.3
new file mode 100644 (file)
index 0000000..008a311
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fake_print_context_important_simple_variable "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_important_simple_variable \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_important_simple_variable\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a variable context message with a before string, an after string, and a string variable with context set to important but without prefix and suffix.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B variable
+The string representing the variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_simple.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_simple.3
new file mode 100644 (file)
index 0000000..d0b84f6
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_context_simple "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_simple\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fImessage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a simple context message with prefix and a single string message.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B message
+The string to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_simple_variable.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_simple_variable.3
new file mode 100644 (file)
index 0000000..38957a1
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fake_print_context_simple_variable "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_simple_variable \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_simple_variable\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a variable context message with a before string, an after string, and a string variable.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B variable
+The string representing the variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_number.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_number.3
new file mode 100644 (file)
index 0000000..e541ac3
--- /dev/null
@@ -0,0 +1,76 @@
+.TH fake_print_context_wrapped_number "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_wrapped_number \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_wrapped_number\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_t          \fP\fIbefore\fP,
+    \fBconst f_number_unsigned_t \fP\fInumber\fP,
+    \fBconst f_string_t          \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a variable context message with a before string, an after string, and an unsigned number variable.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B number
+The number representing the variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameter.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameter.3
new file mode 100644 (file)
index 0000000..b30178b
--- /dev/null
@@ -0,0 +1,131 @@
+.TH fake_print_context_wrapped_parameter "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_wrapped_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_wrapped_parameter\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a parameter context message with a before string, an after string, a string symbol, and a parameter name.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B symbol
+The string representing the symbol for the parameter. Set to f_string_empty_s to disable.
+
+.TP
+.B name
+The string representing the parameter name.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameter_value.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameter_value.3
new file mode 100644 (file)
index 0000000..8d4c746
--- /dev/null
@@ -0,0 +1,166 @@
+.TH fake_print_context_wrapped_parameter_value "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_wrapped_parameter_value \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_wrapped_parameter_value\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_t        \fP\fIbetween\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a parameter context message with a before string, a middle string, an after string, a string symbol, a parameter name, and the parameter value.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B symbol
+The string representing the symbol for the parameter. Set to f_string_empty_s to disable.
+
+.TP
+.B name
+The string representing the parameter name.
+
+.TP
+.B between
+The string being printed after the parameter name and before the parameter value.
+
+.TP
+.B value
+The value associated with the given parameter name.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameters.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_parameters.3
new file mode 100644 (file)
index 0000000..2c3df0d
--- /dev/null
@@ -0,0 +1,259 @@
+.TH fake_print_context_wrapped_parameters "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_wrapped_parameters \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_wrapped_parameters\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_1\fP,
+    \fBconst f_string_static_t \fP\fIname_1\fP,
+    \fBconst f_string_t        \fP\fIbetween_1\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_2\fP,
+    \fBconst f_string_static_t \fP\fIname_2\fP,
+    \fBconst f_string_t        \fP\fIbetween_2\fP,
+    \fBconst f_string_static_t \fP\fIsymbol_3\fP,
+    \fBconst f_string_static_t \fP\fIname_3\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a parameter context message with a there parameters, with symbols, and wrapping strings.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B symbol_1
+The string representing the symbol for the parameter. Set to f_string_empty_s to disable.
+
+.TP
+.B name_1
+The string representing the parameter name.
+
+.TP
+.B between_1
+
+.TP
+.B symbol_2
+The string representing the symbol for the parameter. Set to f_string_empty_s to disable.
+
+.TP
+.B name_2
+The string representing the parameter name.
+
+.TP
+.B between_2
+
+.TP
+.B symbol_3
+The string representing the symbol for the parameter. Set to f_string_empty_s to disable.
+
+.TP
+.B name_3
+The string representing the parameter name.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_variable.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_variable.3
new file mode 100644 (file)
index 0000000..41d0139
--- /dev/null
@@ -0,0 +1,101 @@
+.TH fake_print_context_wrapped_variable "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_wrapped_variable \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_wrapped_variable\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIvariable\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a wrapped context message with a before string, an after string, and a string variable.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string. Set to NULL to disable.
+
+.TP
+.B variable
+The string representing the variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string. Set to NULL to disable.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_variables.3 b/level_3/fake/data/documentation/man/man3/fake_print_context_wrapped_variables.3
new file mode 100644 (file)
index 0000000..2bb5a78
--- /dev/null
@@ -0,0 +1,136 @@
+.TH fake_print_context_wrapped_variables "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_context_wrapped_variables \-
+.SH SYNOPSIS
+.nf
+.B #include <context.h>
+.sp
+\fBvoid fake_print_context_wrapped_variables\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIfirst\fP,
+    \fBconst f_string_t        \fP\fIbetween\fP,
+    \fBconst f_string_static_t \fP\fIsecond\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a wrapped context message with a before string, a middle strng, an after string, and two string variables.
+.PP
+This is primarily used by numerous print functions to reduce code. This is not used for any print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string.
+
+.TP
+.B first
+The string representing the first variable.
+
+.TP
+.B between
+The string being printed before the variable. Likely should have a space added at the start and end of the string.
+
+.TP
+.B second
+The string representing the second variable.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcontext.h\fP(3), \fIfake_print_context_important_simple\fP(3), \fIfake_print_context_important_simple_variable\fP(3), \fIfake_print_context_simple\fP(3), \fIfake_print_context_simple_variable\fP(3), \fIfake_print_context_wrapped_number\fP(3), \fIfake_print_context_wrapped_parameter\fP(3), \fIfake_print_context_wrapped_parameter_value\fP(3), \fIfake_print_context_wrapped_parameters\fP(3), \fIfake_print_context_wrapped_variable\fP(3), \fIfake_print_context_wrapped_variables\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_debug_build_directory_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_print_debug_build_directory_not_found.3
new file mode 100644 (file)
index 0000000..fcbe36d
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_debug_build_directory_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_debug_build_directory_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <debug.h>
+.sp
+\fBf_status_t fake_print_debug_build_directory_not_found\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBf_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print debug message about the build directory not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path of the build directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdebug.h\fP(3), \fIfake_print_debug_build_directory_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error.3 b/level_3/fake/data/documentation/man/man3/fake_print_error.3
new file mode 100644 (file)
index 0000000..2dd73d4
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fake_print_error "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+This does not print a leading first line, better allowing it to be used while loading settings or before the normal first line is printed.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_argument_empty.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_argument_empty.3
new file mode 100644 (file)
index 0000000..2515e2a
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_print_error_argument_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_argument_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_argument_empty\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message for when an argument is an empty string.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B index
+The index of the argument that is an empty string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_number()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file.3
new file mode 100644 (file)
index 0000000..3a224bc
--- /dev/null
@@ -0,0 +1,199 @@
+.TH fake_print_error_build_operation_file "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_build_operation_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_build_operation_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_t        \fP\fIfunction\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP,
+    \fBconst f_string_static_t \fP\fIhow\fP,
+    \fBconst uint8_t           \fP\fIfallback\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print build operation file error messages.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if print is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B function
+The name of the function.
+
+.TP
+.B operation
+The operation performed.
+
+.TP
+.B source
+The operation source.
+
+.TP
+.B destination
+The operation destination, if applicable. Set destination.used to 0 to disable.
+
+.TP
+.B how
+The how the operation is perform, such as "to" in "copy" source "to" destination.
+
+.TP
+.B fallback
+Set to F_true to print the fallback error message for unknown errors.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true is returned if the status code has no print message. F_false is returned on successful print of known errors. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file_full.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file_full.3
new file mode 100644 (file)
index 0000000..726d134
--- /dev/null
@@ -0,0 +1,196 @@
+.TH fake_print_error_build_operation_file_full "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_build_operation_file_full \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_build_operation_file_full\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIbefore\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP,
+    \fBconst f_string_static_t \fP\fIhow\fP,
+    \fBconst f_string_t        \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print build operation file error messages.
+.PP
+This prints the "copy source to destination" part of the message.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if print is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B before
+The string being printed before the variable. Likely should have a space added at the end of the string.
+
+.TP
+.B operation
+The operation performed.
+
+.TP
+.B source
+The operation source.
+
+.TP
+.B destination
+The operation destination, if applicable. Set destination.used to 0 to disable.
+
+.TP
+.B how
+The how the operation is perform, such as "to" in "copy" source "to" destination.
+
+.TP
+.B after
+The string being printed after the variable. Likely should have a space added at the start of the string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP, \fIfake_print_error_build_operation_file_partial()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file_partial.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_build_operation_file_partial.3
new file mode 100644 (file)
index 0000000..845331d
--- /dev/null
@@ -0,0 +1,181 @@
+.TH fake_print_error_build_operation_file_partial "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_build_operation_file_partial \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBvoid fake_print_error_build_operation_file_partial\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP,
+    \fBconst f_string_static_t \fP\fIhow\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Helper function for printing build operation file error messages.
+.PP
+This prints the "copy source to destination" part of the message.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B operation
+The operation performed.
+
+.TP
+.B source
+The operation source.
+
+.TP
+.B destination
+The operation destination, if applicable. Set destination.used to 0 to disable.
+
+.TP
+.B how
+The how the operation is perform, such as "to" in "copy" source "to" destination. Not optional when destination.used is not 0. Not used when destination.used is 0.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_directory_create_parent_missing.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_directory_create_parent_missing.3
new file mode 100644 (file)
index 0000000..a9daaca
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_directory_create_parent_missing "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_directory_create_parent_missing \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_directory_create_parent_missing\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding file create failure due to a missing or invalid parent directory.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_execute_program_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_execute_program_not_found.3
new file mode 100644 (file)
index 0000000..5f11d23
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_execute_program_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_execute_program_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_execute_program_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIprogram\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding program needed for execution is not found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B program
+The name of the not found program.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_failure_operation.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_failure_operation.3
new file mode 100644 (file)
index 0000000..1cc0461
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_print_error_failure_operation "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_failure_operation \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_failure_operation\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fIoperation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when an operation fails.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B operation
+The identifier of the operation that failed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_failure_script.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_failure_script.3
new file mode 100644 (file)
index 0000000..2723acf
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_failure_script "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_failure_script \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_failure_script\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIscript\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when an operation fails.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B script
+The name of the script that failed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_fallback.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_fallback.3
new file mode 100644 (file)
index 0000000..541ff57
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fake_print_error_fallback "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_fallback \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_fallback\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way, setting fallback to F_false and returning result.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true is returned if the status code has no print message. F_false is returned on successful print of known errors. F_output_not on success, but no printing is performed..
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_file.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_file.3
new file mode 100644 (file)
index 0000000..d147b08
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fake_print_error_file "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error message regarding a function failing in some way.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_file_create_parent_missing.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_file_create_parent_missing.3
new file mode 100644 (file)
index 0000000..43e7748
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_file_create_parent_missing "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_file_create_parent_missing \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_file_create_parent_missing\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding file create directory failure due to a missing or invalid parent directory.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_file_simple.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_file_simple.3
new file mode 100644 (file)
index 0000000..bf76da9
--- /dev/null
@@ -0,0 +1,135 @@
+.TH fake_print_error_file_simple "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_file_simple \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_file_simple\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error message regarding a function failing in some way.
+.PP
+This prints a simple message to avoid "Unable to find file..., because file cannot be found." type of messages.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_fss.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_fss.3
new file mode 100644 (file)
index 0000000..c56773f
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fake_print_error_fss "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_fss \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_fss\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_t        \fP\fIfunction\fP,
+    \fBconst f_string_static_t \fP\fIpath_file\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBconst uint8_t           \fP\fIfallback\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print FSS error messages.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B function
+The name of the function.
+
+.TP
+.B path_file
+The path to the file.
+
+.TP
+.B range
+The range representing the position in the buffer such that range.start is where the error happened.
+
+.TP
+.B fallback
+Set to F_true to print the fallback error message for unknown errors.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true is returned if the status code has no print message. F_false is returned on successful print of known errors. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP, \fIfake_print_error_fss_message()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_fss_message.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_fss_message.3
new file mode 100644 (file)
index 0000000..014a69d
--- /dev/null
@@ -0,0 +1,126 @@
+.TH fake_print_error_fss_message "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_fss_message \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_fss_message\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_t          \fP\fIdebug\fP,
+    \fBconst f_string_t          \fP\fIprefix\fP,
+    \fBconst f_string_t          \fP\fIbefore\fP,
+    \fBconst f_number_unsigned_t \fP\fInumber\fP,
+    \fBconst f_string_t          \fP\fImiddle\fP,
+    \fBconst f_string_static_t   \fP\fIvariable\fP,
+    \fBconst f_string_t          \fP\fIafter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print specific FSS error message.
+.PP
+This is primarily used by numerous error print functions to reduce code. This is not used for any error print functions that has complex format structures.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B prefix
+The prefix to print.
+
+.TP
+.B before
+The message to prepend.
+
+.TP
+.B number
+The number to print.
+
+.TP
+.B middle
+The message after the number.
+
+.TP
+.B variable
+The variable name associated with the number.
+
+.TP
+.B after
+The message to append.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_group_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_group_not_found.3
new file mode 100644 (file)
index 0000000..944588f
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_group_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_group_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_group_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIgroup\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding the group not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B group
+A string representing the group (either as a name or as a group ID).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_mode_invalid.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_mode_invalid.3
new file mode 100644 (file)
index 0000000..07f9a03
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_mode_invalid "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_mode_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_mode_invalid\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding the mode being invalid.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B mode
+A string representing the invalid mode.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_number_too_large.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_number_too_large.3
new file mode 100644 (file)
index 0000000..8881efb
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_number_too_large "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_number_too_large \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_number_too_large\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding the number being too large.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B number
+A string representing the number that is too large.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_failed.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_failed.3
new file mode 100644 (file)
index 0000000..53dcfaf
--- /dev/null
@@ -0,0 +1,144 @@
+.TH fake_print_error_operation_failed "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_failed \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_failed\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIsection_name\fP,
+    \fBconst f_range_t         \fP\fIoperation_name\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when processing some fakefile section, for a specific line and operation, and that operation failed.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B buffer
+The buffer containing the fakefile data.
+
+.TP
+.B section_name
+The range within the buffer representing the section name.
+
+.TP
+.B operation_name
+The range within the buffer representing the operation name within the section.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_argument_unknown.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_argument_unknown.3
new file mode 100644 (file)
index 0000000..6cc9587
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_operation_link_argument_unknown "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_link_argument_unknown \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_link_argument_unknown\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIargument\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when a given link argument is unknown.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B argument
+The argument that is unknown by the link operation.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_point_exists.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_point_exists.3
new file mode 100644 (file)
index 0000000..4a8201a
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_operation_link_point_exists "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_link_point_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_link_point_exists\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIargument\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when a given link point file already exists.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B argument
+The argument representing the point file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_target_exists_not.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_link_target_exists_not.3
new file mode 100644 (file)
index 0000000..8a40b68
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_operation_link_target_exists_not "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_link_target_exists_not \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_link_target_exists_not\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIargument\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when a given link target file does not already exist.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B argument
+The argument representing the point file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP, \fIfake_print_common_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_path_outside.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_path_outside.3
new file mode 100644 (file)
index 0000000..bcbe3e3
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fake_print_error_operation_path_outside "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_path_outside \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_path_outside\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when processing some fakefile section, for a specific line and operation, and that operation has a path outside of the project root.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B path
+The path that is outside of the project path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_path_stack_max.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_path_stack_max.3
new file mode 100644 (file)
index 0000000..97e0e2a
--- /dev/null
@@ -0,0 +1,104 @@
+.TH fake_print_error_operation_path_stack_max "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_path_stack_max \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_path_stack_max\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_t        \fP\fIfunction\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when processing some fakefile section, for a specific line and operation.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B function
+The name of the function.
+
+.TP
+.B path
+The path to the directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_stack_max.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_stack_max.3
new file mode 100644 (file)
index 0000000..22c82a7
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fake_print_error_operation_stack_max "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_stack_max \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_stack_max\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_t          \fP\fIdebug\fP,
+    \fBconst f_string_static_t   \fP\fIbuffer\fP,
+    \fBconst f_range_t           \fP\fIsection_name\fP,
+    \fBconst f_range_t           \fP\fIoperation_name\fP,
+    \fBconst f_number_unsigned_t \fP\fIstack_max\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when processing some fakefile section, for a specific line and operation, and that the max stack depth is reached.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B buffer
+The buffer containing the fakefile data.
+
+.TP
+.B section_name
+The range within the buffer representing the section name.
+
+.TP
+.B operation_name
+The range within the buffer representing the operation name within the section.
+
+.TP
+.B stack_max
+The max stack depth.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_operation_unknown.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_operation_unknown.3
new file mode 100644 (file)
index 0000000..bc87c63
--- /dev/null
@@ -0,0 +1,144 @@
+.TH fake_print_error_operation_unknown "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_operation_unknown \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_operation_unknown\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIbuffer\fP,
+    \fBconst f_range_t         \fP\fIsection_name\fP,
+    \fBconst f_range_t         \fP\fIoperation_name\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error messages when processing some fakefile section, for a specific line and operation, and that operation is invalid.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B buffer
+The buffer containing the fakefile data.
+
+.TP
+.B section_name
+The range within the buffer representing the section name.
+
+.TP
+.B operation_name
+The range within the buffer representing the operation name within the section.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_directory_not_found_path.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_directory_not_found_path.3
new file mode 100644 (file)
index 0000000..c547e0f
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fake_print_error_parameter_directory_not_found_path "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_parameter_directory_not_found_path \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_parameter_directory_not_found_path\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the directory parameter value is not found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol of the parameter.
+
+.TP
+.B name
+The name of the parameter.
+
+.TP
+.B value
+The value that is not found.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_parameter_value()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_not_empty.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_not_empty.3
new file mode 100644 (file)
index 0000000..5043790
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fake_print_error_parameter_not_empty "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_parameter_not_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_parameter_not_empty\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the parameter value is an empty string.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol of the parameter.
+
+.TP
+.B name
+The name of the parameter.
+
+.TP
+.B value
+The value that is invalid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_parameter()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_not_word.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_not_word.3
new file mode 100644 (file)
index 0000000..9c90443
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fake_print_error_parameter_not_word "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_parameter_not_word \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_parameter_not_word\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the parameter value contains a non-word, non-minus, and non-plus character.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol of the parameter.
+
+.TP
+.B name
+The name of the parameter.
+
+.TP
+.B value
+The value that is invalid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_operation_not_with.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_operation_not_with.3
new file mode 100644 (file)
index 0000000..351c80e
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_print_error_parameter_operation_not_with "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_parameter_operation_not_with \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_parameter_operation_not_with\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIoperation_1\fP,
+    \fBconst f_string_static_t \fP\fIoperation_2\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when two designated operations cannot be used together.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B operation_1
+The name of the first operation that cannot be used.
+
+.TP
+.B operation_2
+The name of the second operation that cannot be used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_too_many.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_parameter_too_many.3
new file mode 100644 (file)
index 0000000..158ed60
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_print_error_parameter_too_many "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_parameter_too_many \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_parameter_too_many\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIparameter\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message for when the parameter is specified too many times.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol of the parameter.
+
+.TP
+.B parameter
+The parameter name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_parameter()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_requires_more_arguments.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_requires_more_arguments.3
new file mode 100644 (file)
index 0000000..d709c5a
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_error_requires_more_arguments "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_requires_more_arguments \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_requires_more_arguments\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message for when there are more arguments are required (such as to a fakefile operation).
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_too_many_arguments.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_too_many_arguments.3
new file mode 100644 (file)
index 0000000..7c21d95
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_error_too_many_arguments "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_too_many_arguments \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_too_many_arguments\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message for when there are too many arguments passed (such as to a fakefile operation).
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_error_user_not_found.3 b/level_3/fake/data/documentation/man/man3/fake_print_error_user_not_found.3
new file mode 100644 (file)
index 0000000..9d13895
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_error_user_not_found "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_error_user_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fake_print_error_user_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIuser\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message regarding the user not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B user
+A string representing the user (either as a name or as a user ID).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfake_print_error\fP(3), \fIfake_print_error_argument_empty\fP(3), \fIfake_print_error_build_operation_file\fP(3), \fIfake_print_error_build_operation_file_full\fP(3), \fIfake_print_error_build_operation_file_partial\fP(3), \fIfake_print_error_directory_create_parent_missing\fP(3), \fIfake_print_error_execute_program_not_found\fP(3), \fIfake_print_error_failure_operation\fP(3), \fIfake_print_error_failure_script\fP(3), \fIfake_print_error_fallback\fP(3), \fIfake_print_error_file\fP(3), \fIfake_print_error_file_create_parent_missing\fP(3), \fIfake_print_error_file_simple\fP(3), \fIfake_print_error_fss\fP(3), \fIfake_print_error_fss_message\fP(3), \fIfake_print_error_group_not_found\fP(3), \fIfake_print_error_mode_invalid\fP(3), \fIfake_print_error_number_too_large\fP(3), \fIfake_print_error_operation_failed\fP(3), \fIfake_print_error_operation_link_argument_unknown\fP(3), \fIfake_print_error_operation_link_point_exists\fP(3), \fIfake_print_error_operation_link_target_exists_not\fP(3), \fIfake_print_error_operation_path_outside\fP(3), \fIfake_print_error_operation_path_stack_max\fP(3), \fIfake_print_error_operation_stack_max\fP(3), \fIfake_print_error_operation_unknown\fP(3), \fIfake_print_error_parameter_directory_not_found_path\fP(3), \fIfake_print_error_parameter_not_empty\fP(3), \fIfake_print_error_parameter_not_word\fP(3), \fIfake_print_error_parameter_operation_not_with\fP(3), \fIfake_print_error_parameter_too_many\fP(3), \fIfake_print_error_requires_more_arguments\fP(3), \fIfake_print_error_too_many_arguments\fP(3), \fIfake_print_error_user_not_found\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_message_building.3 b/level_3/fake/data/documentation/man/man3/fake_print_message_building.3
new file mode 100644 (file)
index 0000000..88a849c
--- /dev/null
@@ -0,0 +1,232 @@
+.TH fake_print_message_building "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_message_building \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_print_message_building\fP(
+    \fBfl_print_t *const               \fP\fIprint\fP,
+    \fBconst f_string_statics_t *const \fP\fIbuild_arguments\fP,
+    \fBfake_build_setting_t *const     \fP\fIsetting_build\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about building.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B build_arguments
+(optional) The build arguments.
+
+.TP
+.B setting_build
+The build setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Build settings data.
+.PP
+modes_default: The modes_default setting.
+.sp
+.RS
+.nf
+\fB
+struct fake_build_setting_t {
+  uint8_t             \fIflag\fP;
+  uint8_t             \fIlanguage\fP;
+  uint8_t             \fIversion_file\fP;
+  uint8_t             \fIversion_target\fP;
+  uint8_t             \fIbuild_script\fP;
+  uint8_t             \fIbuild_shared\fP;
+  uint8_t             \fIbuild_static\fP;
+  uint8_t             \fIhas_path_standard\fP;
+  uint8_t             \fIpreserve_path_headers\fP;
+  uint8_t             \fIsearch_exclusive\fP;
+  uint8_t             \fIsearch_shared\fP;
+  uint8_t             \fIsearch_static\fP;
+  f_string_dynamic_t  \fIbuild_compiler\fP;
+  f_string_dynamic_t  \fIbuild_indexer\fP;
+  f_string_dynamic_t  \fIbuild_language\fP;
+  f_string_dynamic_t  \fIbuild_language_path\fP;
+  f_string_dynamic_t  \fIbuild_name\fP;
+  f_string_dynamic_t  \fIbuild_name_library\fP;
+  f_string_dynamic_t  \fIbuild_name_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_library_static\fP;
+  f_string_dynamic_t  \fIbuild_name_object_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_object_static\fP;
+  f_string_dynamic_t  \fIbuild_name_program\fP;
+  f_string_dynamic_t  \fIbuild_name_program_shared\fP;
+  f_string_dynamic_t  \fIbuild_name_program_static\fP;
+  f_string_dynamic_t  \fIbuild_name_script\fP;
+  f_string_dynamic_t  \fIpath_headers\fP;
+  f_string_dynamic_t  \fIpath_language\fP;
+  f_string_dynamic_t  \fIpath_library_script\fP;
+  f_string_dynamic_t  \fIpath_library_shared\fP;
+  f_string_dynamic_t  \fIpath_library_static\fP;
+  f_string_dynamic_t  \fIpath_object_script\fP;
+  f_string_dynamic_t  \fIpath_object_shared\fP;
+  f_string_dynamic_t  \fIpath_object_static\fP;
+  f_string_dynamic_t  \fIpath_program_script\fP;
+  f_string_dynamic_t  \fIpath_program_shared\fP;
+  f_string_dynamic_t  \fIpath_program_static\fP;
+  f_string_dynamic_t  \fIpath_sources\fP;
+  f_string_dynamic_t  \fIpath_sources_headers\fP;
+  f_string_dynamic_t  \fIpath_sources_library\fP;
+  f_string_dynamic_t  \fIpath_sources_object\fP;
+  f_string_dynamic_t  \fIpath_sources_program\fP;
+  f_string_dynamic_t  \fIpath_sources_script\fP;
+  f_string_dynamic_t  \fIprocess_post\fP;
+  f_string_dynamic_t  \fIprocess_pre\fP;
+  f_string_dynamic_t  \fIstage\fP;
+  f_string_dynamic_t  \fIversion_major\fP;
+  f_string_dynamic_t  \fIversion_major_prefix\fP;
+  f_string_dynamic_t  \fIversion_micro\fP;
+  f_string_dynamic_t  \fIversion_micro_prefix\fP;
+  f_string_dynamic_t  \fIversion_minor\fP;
+  f_string_dynamic_t  \fIversion_minor_prefix\fP;
+  f_string_dynamic_t  \fIversion_nano\fP;
+  f_string_dynamic_t  \fIversion_nano_prefix\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_library_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_object_static\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_shared\fP;
+  f_string_dynamics_t \fIbuild_compiler_arguments_program_static\fP;
+  f_string_dynamics_t \fIbuild_indexer_arguments\fP;
+  f_string_dynamics_t \fIbuild_libraries\fP;
+  f_string_dynamics_t \fIbuild_libraries_shared\fP;
+  f_string_dynamics_t \fIbuild_libraries_static\fP;
+  f_string_dynamics_t \fIbuild_objects_library\fP;
+  f_string_dynamics_t \fIbuild_objects_library_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_library_static\fP;
+  f_string_dynamics_t \fIbuild_objects_program\fP;
+  f_string_dynamics_t \fIbuild_objects_program_shared\fP;
+  f_string_dynamics_t \fIbuild_objects_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_documentation\fP;
+  f_string_dynamics_t \fIbuild_sources_headers\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_headers_static\fP;
+  f_string_dynamics_t \fIbuild_sources_library\fP;
+  f_string_dynamics_t \fIbuild_sources_library_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_library_static\fP;
+  f_string_dynamics_t \fIbuild_sources_object\fP;
+  f_string_dynamics_t \fIbuild_sources_object_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_object_static\fP;
+  f_string_dynamics_t \fIbuild_sources_program\fP;
+  f_string_dynamics_t \fIbuild_sources_program_shared\fP;
+  f_string_dynamics_t \fIbuild_sources_program_static\fP;
+  f_string_dynamics_t \fIbuild_sources_script\fP;
+  f_string_dynamics_t \fIbuild_sources_setting\fP;
+  f_string_dynamics_t \fIdefines\fP;
+  f_string_dynamics_t \fIdefines_library\fP;
+  f_string_dynamics_t \fIdefines_library_shared\fP;
+  f_string_dynamics_t \fIdefines_library_static\fP;
+  f_string_dynamics_t \fIdefines_object\fP;
+  f_string_dynamics_t \fIdefines_object_shared\fP;
+  f_string_dynamics_t \fIdefines_object_static\fP;
+  f_string_dynamics_t \fIdefines_program\fP;
+  f_string_dynamics_t \fIdefines_program_shared\fP;
+  f_string_dynamics_t \fIdefines_program_static\fP;
+  f_string_dynamics_t \fIdefines_shared\fP;
+  f_string_dynamics_t \fIdefines_static\fP;
+  f_string_dynamics_t \fIenvironment\fP;
+  f_string_dynamics_t \fIflags\fP;
+  f_string_dynamics_t \fIflags_library\fP;
+  f_string_dynamics_t \fIflags_library_shared\fP;
+  f_string_dynamics_t \fIflags_library_static\fP;
+  f_string_dynamics_t \fIflags_object\fP;
+  f_string_dynamics_t \fIflags_object_shared\fP;
+  f_string_dynamics_t \fIflags_object_static\fP;
+  f_string_dynamics_t \fIflags_program\fP;
+  f_string_dynamics_t \fIflags_program_shared\fP;
+  f_string_dynamics_t \fIflags_program_static\fP;
+  f_string_dynamics_t \fIflags_shared\fP;
+  f_string_dynamics_t \fIflags_static\fP;
+  f_string_dynamics_t \fImodes\fP;
+  f_string_dynamics_t \fImodes_default\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_print_message_building\fP(3), \fIfake_print_message_delete_all_files\fP(3), \fIfake_print_message_generating_skeleton\fP(3), \fIfake_print_message_help\fP(3), \fIfake_main_t\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_message_delete_all_files.3 b/level_3/fake/data/documentation/man/man3/fake_print_message_delete_all_files.3
new file mode 100644 (file)
index 0000000..fdd8bbc
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_print_message_delete_all_files "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_message_delete_all_files \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_print_message_delete_all_files\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about deleting all files.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_print_message_building\fP(3), \fIfake_print_message_delete_all_files\fP(3), \fIfake_print_message_generating_skeleton\fP(3), \fIfake_print_message_help\fP(3), \fIfake_main_t\fP, \fIfake_print_common_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_message_generating_skeleton.3 b/level_3/fake/data/documentation/man/man3/fake_print_message_generating_skeleton.3
new file mode 100644 (file)
index 0000000..c8ae9a3
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_print_message_generating_skeleton "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_message_generating_skeleton \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_print_message_generating_skeleton\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a message about generating skeleton.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_print_message_building\fP(3), \fIfake_print_message_delete_all_files\fP(3), \fIfake_print_message_generating_skeleton\fP(3), \fIfake_print_message_help\fP(3), \fIfake_main_t\fP, \fIfake_print_common_simple()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_message_help.3 b/level_3/fake/data/documentation/man/man3/fake_print_message_help.3
new file mode 100644 (file)
index 0000000..fd1ee37
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_message_help "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fake_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfake_print_message_building\fP(3), \fIfake_print_message_delete_all_files\fP(3), \fIfake_print_message_generating_skeleton\fP(3), \fIfake_print_message_help\fP(3), \fIfake_main_t\fP, \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic_raw()\fP, \fIfl_print_format()\fP, \fIfll_program_print_help_header()\fP, \fIfll_program_print_help_option()\fP, \fIfll_program_print_help_option_other()\fP, \fIfll_program_print_help_option_standard()\fP, \fIfll_program_print_help_usage()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_operation_all_complete.3 b/level_3/fake/data/documentation/man/man3/fake_print_operation_all_complete.3
new file mode 100644 (file)
index 0000000..52b81ab
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fake_print_operation_all_complete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_operation_all_complete \-
+.SH SYNOPSIS
+.nf
+.B #include <operation.h>
+.sp
+\fBf_status_t fake_print_operation_all_complete\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message for when all operates successfully complete.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperation.h\fP(3), \fIfake_print_operation_all_complete\fP(3), \fIfake_print_operation_cancelled\fP(3), \fIfake_main_t\fP, \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_operation_cancelled.3 b/level_3/fake/data/documentation/man/man3/fake_print_operation_cancelled.3
new file mode 100644 (file)
index 0000000..89ee7bd
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_print_operation_cancelled "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_operation_cancelled \-
+.SH SYNOPSIS
+.nf
+.B #include <operation.h>
+.sp
+\fBf_status_t fake_print_operation_cancelled\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fIoperation\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print message for when the operation is cancelled.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B operation
+The identifier of the operation that failed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIoperation.h\fP(3), \fIfake_print_operation_all_complete\fP(3), \fIfake_print_operation_cancelled\fP(3), \fIfake_main_t\fP, \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_cloning.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_cloning.3
new file mode 100644 (file)
index 0000000..fed1cf5
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_print_verbose_cloning "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_cloning \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_cloning\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about cloning a file.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B source
+The source file path.
+
+.TP
+.B destination
+The destination file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_copying.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_copying.3
new file mode 100644 (file)
index 0000000..0f13b94
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_print_verbose_copying "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_copying \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_copying\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about copying a file.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B source
+The source file path.
+
+.TP
+.B destination
+The destination file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_create_directory.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_create_directory.3
new file mode 100644 (file)
index 0000000..529d1b4
--- /dev/null
@@ -0,0 +1,89 @@
+.TH fake_print_verbose_create_directory "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_create_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBvoid fake_print_verbose_create_directory\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about creating a directory.
+.PP
+This requires print.custom to be fake_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_create_file.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_create_file.3
new file mode 100644 (file)
index 0000000..0cfdd7a
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_verbose_create_file "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_create_file \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_create_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about creating a file.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_directory_exists.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_directory_exists.3
new file mode 100644 (file)
index 0000000..192a186
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_verbose_directory_exists "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_directory_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_directory_exists\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a verbose message for when a directory already exists.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists.3
new file mode 100644 (file)
index 0000000..c345052
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_verbose_file_exists "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_file_exists \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_file_exists\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a verbose message for when a file already exists.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists_as_link.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists_as_link.3
new file mode 100644 (file)
index 0000000..6d189a8
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_verbose_file_exists_as_link "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_file_exists_as_link \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_file_exists_as_link\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a verbose message for when a file already exists as a symbolic link.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists_not_regular_or_link.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_exists_not_regular_or_link.3
new file mode 100644 (file)
index 0000000..7c2b764
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_verbose_file_exists_not_regular_or_link "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_file_exists_not_regular_or_link \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_file_exists_not_regular_or_link\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a verbose message for when a file already exists but is not a regular file or a symbolic link.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_pre_populated.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_file_pre_populated.3
new file mode 100644 (file)
index 0000000..a60b405
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_verbose_file_pre_populated "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_file_pre_populated \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_file_pre_populated\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print a verbose message for when a file is pre-populated.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_simple_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_verbose_moving.3 b/level_3/fake/data/documentation/man/man3/fake_print_verbose_moving.3
new file mode 100644 (file)
index 0000000..cb1b05f
--- /dev/null
@@ -0,0 +1,124 @@
+.TH fake_print_verbose_moving "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_verbose_moving \-
+.SH SYNOPSIS
+.nf
+.B #include <verbose.h>
+.sp
+\fBf_status_t fake_print_verbose_moving\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsource\fP,
+    \fBconst f_string_static_t \fP\fIdestination\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print verbose message about moving a file.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B source
+The source file path.
+
+.TP
+.B destination
+The destination file path.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIverbose.h\fP(3), \fIfake_print_verbose_cloning\fP(3), \fIfake_print_verbose_copying\fP(3), \fIfake_print_verbose_create_directory\fP(3), \fIfake_print_verbose_create_file\fP(3), \fIfake_print_verbose_directory_exists\fP(3), \fIfake_print_verbose_file_exists\fP(3), \fIfake_print_verbose_file_exists_as_link\fP(3), \fIfake_print_verbose_file_exists_not_regular_or_link\fP(3), \fIfake_print_verbose_file_pre_populated\fP(3), \fIfake_print_verbose_moving\fP(3), \fIfake_main_t\fP, \fIfake_print_common_wrapped_variables()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_warning_build_directory_not_directory.3 b/level_3/fake/data/documentation/man/man3/fake_print_warning_build_directory_not_directory.3
new file mode 100644 (file)
index 0000000..19254fe
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_warning_build_directory_not_directory "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_warning_build_directory_not_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_print_warning_build_directory_not_directory\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBf_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message about the build directory not being found.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The path of the build directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_print_warning_build_directory_not_directory\fP(3), \fIfake_print_warning_path_exists_not_directory\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_print_warning_path_exists_not_directory.3 b/level_3/fake/data/documentation/man/man3/fake_print_warning_path_exists_not_directory.3
new file mode 100644 (file)
index 0000000..5d1c945
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fake_print_warning_path_exists_not_directory "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_print_warning_path_exists_not_directory \-
+.SH SYNOPSIS
+.nf
+.B #include <warning.h>
+.sp
+\fBf_status_t fake_print_warning_path_exists_not_directory\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print warning message about path existing but is not a directory.
+.PP
+This requires print.custom to be fake_main_t.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B path
+The name of the file or directory.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIwarning.h\fP(3), \fIfake_print_warning_build_directory_not_directory\fP(3), \fIfake_print_warning_path_exists_not_directory\fP(3), \fIfake_main_t\fP, \fIfake_print_context_wrapped_variable()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_setting_delete.3 b/level_3/fake/data/documentation/man/man3/fake_setting_delete.3
new file mode 100644 (file)
index 0000000..0cbbbcd
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fake_setting_delete "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fake_setting_delete\fP(
+    \fBfake_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The fake main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+operations: The operations, in the order in which they are given.
+.sp
+.RS
+.nf
+\fB
+struct fake_setting_t {
+  uint32_t            \fIflag\fP;
+  f_state_t           \fIstate\fP;
+  f_string_dynamic_t  \fIbuild\fP;
+  f_string_dynamic_t  \fIdata\fP;
+  f_string_dynamic_t  \fIdocuments\fP;
+  f_string_dynamic_t  \fIfakefile\fP;
+  f_string_dynamic_t  \fIlicenses\fP;
+  f_string_dynamic_t  \fIprocess\fP;
+  f_string_dynamic_t  \fIsettings\fP;
+  f_string_dynamic_t  \fIsources\fP;
+  f_string_dynamic_t  \fIunder\fP;
+  f_string_dynamic_t  \fIwork\fP;
+  f_string_dynamics_t \fIdefines\fP;
+  f_string_dynamics_t \fImodes\fP;
+  f_uint8s_t          \fIoperations\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfake_build_data_delete\fP(3), \fIfake_build_setting_delete\fP(3), \fIfake_build_stage_delete\fP(3), \fIfake_data_delete\fP(3), \fIfake_main_delete\fP(3), \fIfake_make_data_delete\fP(3), \fIfake_make_setting_delete\fP(3), \fIfake_setting_delete\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_setting_load.3 b/level_3/fake/data/documentation/man/man3/fake_setting_load.3
new file mode 100644 (file)
index 0000000..e1f6037
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fake_setting_load "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBfake_main_t *const          \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: f_memory_array_increase_by(). Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_path_directory_cleanup(). Errors (with error bit) from: f_utf_is_word_dash_plus(). Errors (with error bit) from: fll_program_parameter_additional_rip(). Errors (with error bit) from: fll_program_parameter_process_context_standard(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program and setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_iki_data_reset\fP(3), \fIfake_setting_load\fP(3), \fIfake_setting_load_parameter_callback\fP(3), \fIfake_string_dynamic_reset\fP(3), \fIfake_string_dynamics_reset\fP(3), \fIfake_string_dynamics_reset_to\fP(3), \fIf_console_parameter_process()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_path_directory_cleanup()\fP, \fIf_utf_is_word_dash_plus()\fP, \fIfll_program_parameter_additional_rip()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_memory_array_increase_by()\fP, \fIf_memory_array_resize()\fP, \fIf_path_directory_cleanup()\fP, \fIf_utf_is_word_dash_plus()\fP, \fIfll_program_parameter_additional_rip()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_setting_load_parameter_callback.3 b/level_3/fake/data/documentation/man/man3/fake_setting_load_parameter_callback.3
new file mode 100644 (file)
index 0000000..5600213
--- /dev/null
@@ -0,0 +1,116 @@
+.TH fake_setting_load_parameter_callback "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_setting_load_parameter_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_setting_load_parameter_callback\fP(
+    \fBconst f_console_arguments_t        \fP\fIarguments\fP,
+    \fBvoid *const                        \fP\fIparameters\fP,
+    \fBf_console_parameter_state_t *const \fP\fIparameter_state\fP,
+    \fBvoid *const                        \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Callback used by f_console_parameter_process() for custom handling of parameters.
+.PP
+This prints error messages as appropriate.
+.PP
+This alters parameter_state->state->status: F_okay on success. F_process on success, designating that processing should be performed (see f_console_parameter_process()).
+.PP
+Errors (with error bit) from: f_memory_array_increase().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B parameters
+The parameters array (generally from main.parameters) representing all of the parameters to look for. This must be of type f_console_parameters_t.
+
+.TP
+.B parameter_state
+The internal state data primarily managed by f_console_parameter_process(). The state.status is used to represent the return status of this callback.
+
+.TP
+.B main
+This must be of the type fake_main_t.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+State exclusively intended to be used by f_console_parameter_process() and the associated callback.
+.PP
+How these are used is tightly coupled to the f_console_parameter_process(). The f_console_parameter_process() function should be read for the detailed explanation on how to use these. The description here is a relatively generalized description.
+.PP
+Any changes to the f_console_parameter_process() code likely requires changes or re-interpretation of these properties.
+.PP
+need: The number of additional parameters that need to be grabbed.
+.PP
+wrap_up_stop: This is identical to the wrap_up, but it happens due to the stop point being reached.
+.PP
+When using the callback, then the responsibility of ensuring the proper and secure handling of the data is on in the callback. Failure to properly handle this can lead to integrity and security issues.
+.PP
+The result is used to determine what type of parameter is being processed (a short, a long, a remaining, etc..).
+.PP
+The location_sub should start after any of the symbols (for example for 'parameter', the symbol is the two '-', so the initial location_sub should be 2).
+.PP
+The increment_by is generally set to 1 when performing the short matches and is generally set to the entire length of the string (minus the length of the symbol) for long matches. Each character in a short parameter potentially represents a parameter. There will be a loop pass for each character in the short string due to the value of the increment_by.
+.PP
+The need represents the total number of arguments that are needed by the parameter that is just matched. The index of the parameter that is just matched is stored in the "match" variable.
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameter_state_t {
+  uint8_t              \fItype\fP;
+  uint8_t              \fIdepth\fP;
+  uint8_t              \fIwidth\fP;
+  uint8_t              \fIfound\fP;
+  f_console_result_t   \fIresult\fP;
+  f_state_t           *\fIstate\fP;
+  f_number_unsigned_t  \fIat\fP;
+  f_number_unsigned_t  \fIlocation\fP;
+  f_number_unsigned_t  \fIlocation_sub\fP;
+  f_number_unsigneds_t \fIneeds\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_iki_data_reset\fP(3), \fIfake_setting_load\fP(3), \fIfake_setting_load_parameter_callback\fP(3), \fIfake_string_dynamic_reset\fP(3), \fIfake_string_dynamics_reset\fP(3), \fIfake_string_dynamics_reset_to\fP(3), \fIf_console_parameter_process()\fP, \fIf_console_parameter_process()\fP, \fIf_memory_array_increase()\fP, \fIf_console_parameter_process()\fP, \fIf_memory_array_increase()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_signal_handler.3 b/level_3/fake/data/documentation/man/man3/fake_signal_handler.3
new file mode 100644 (file)
index 0000000..7c4eecf
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fake_signal_handler "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid fake_signal_handler\fP(
+    \fBfake_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIfake_signal_handler\fP(3), \fIfake_signal_handler_callback\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_signal_handler_callback.3 b/level_3/fake/data/documentation/man/man3/fake_signal_handler_callback.3
new file mode 100644 (file)
index 0000000..5b08d38
--- /dev/null
@@ -0,0 +1,40 @@
+.TH fake_signal_handler_callback "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_signal_handler_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid fake_signal_handler_callback\fP(
+    \fBf_state_t *const \fP\fIstate\fP,
+    \fBvoid *const      \fP\fIinternal\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+A callback intended to be assigned to the state.interrupt.
+.PP
+The state.custom must be fake_main_t, except for when the code has the bit fake_state_code_local_d. When the fake_state_code_local_d bit is set, then the state.custum must be fake_local_t.
+.PP
+This alters state.status: F_interrupt_not if not interrupted.
+.SH PARAMETERS
+.TP
+.B state
+The f_state_t data.
+
+.TP
+.B internal
+Not used.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIfake_signal_handler\fP(3), \fIfake_signal_handler_callback\fP(3), \fIfake_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_skeleton_operate.3 b/level_3/fake/data/documentation/man/man3/fake_skeleton_operate.3
new file mode 100644 (file)
index 0000000..9e6c048
--- /dev/null
@@ -0,0 +1,95 @@
+.TH fake_skeleton_operate "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_skeleton_operate \-
+.SH SYNOPSIS
+.nf
+.B #include <skeleton.h>
+.sp
+\fBvoid fake_skeleton_operate\fP(
+    \fBfake_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute the skeleton operation.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: fake_skeleton_operate_directory_create() Errors (with error bit) from: fake_skeleton_operate_file_create()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIskeleton.h\fP(3), \fIfake_skeleton_operate\fP(3), \fIfake_skeleton_operate_directory_create\fP(3), \fIfake_skeleton_operate_file_create\fP(3), \fIfake_skeleton_path_source_length\fP(3), \fIfake_skeleton_path_source_string\fP(3), \fIfake_skeleton_operate_directory_create()\fP, \fIfake_skeleton_operate_file_create()\fP, \fIfake_skeleton_operate_directory_create()\fP, \fIfake_skeleton_operate_file_create()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_skeleton_operate_directory_create.3 b/level_3/fake/data/documentation/man/man3/fake_skeleton_operate_directory_create.3
new file mode 100644 (file)
index 0000000..7ca7674
--- /dev/null
@@ -0,0 +1,123 @@
+.TH fake_skeleton_operate_directory_create "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_skeleton_operate_directory_create \-
+.SH SYNOPSIS
+.nf
+.B #include <skeleton.h>
+.sp
+\fBvoid fake_skeleton_operate_directory_create\fP(
+    \fBfake_data_t *const      \fP\fIdata\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a directory if it does not exist, ignore it if it does, and warn if path exists but is not a directory.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_failure (with warning bit) on path exists but is not a directory.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B path
+The file path for the directory to create.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIskeleton.h\fP(3), \fIfake_skeleton_operate\fP(3), \fIfake_skeleton_operate_directory_create\fP(3), \fIfake_skeleton_operate_file_create\fP(3), \fIfake_skeleton_path_source_length\fP(3), \fIfake_skeleton_path_source_string\fP(3), \fIf_directory_create()\fP, \fIf_directory_exists()\fP, \fIf_directory_create()\fP, \fIf_directory_exists()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_skeleton_operate_file_create.3 b/level_3/fake/data/documentation/man/man3/fake_skeleton_operate_file_create.3
new file mode 100644 (file)
index 0000000..eb201d6
--- /dev/null
@@ -0,0 +1,158 @@
+.TH fake_skeleton_operate_file_create "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_skeleton_operate_file_create \-
+.SH SYNOPSIS
+.nf
+.B #include <skeleton.h>
+.sp
+\fBvoid fake_skeleton_operate_file_create\fP(
+    \fBfake_data_t *const      \fP\fIdata\fP,
+    \fBconst f_string_static_t \fP\fIpath\fP,
+    \fBconst uint8_t           \fP\fIexecutable\fP,
+    \fBconst f_string_static_t \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Create a file if it does not exist, ignore it if it does, and warn if path exists but is not a file.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_okay (with warning bit) on file exists but is not a regular or a link.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B path
+The file path for the directory to create.
+
+.TP
+.B executable
+Set to TRUE to make the file executable. Set to FALSE to not make the file executable.
+
+.TP
+.B content
+When creating a new file, write the content specified by this string to that file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIskeleton.h\fP(3), \fIfake_skeleton_operate\fP(3), \fIfake_skeleton_operate_directory_create\fP(3), \fIfake_skeleton_operate_file_create\fP(3), \fIfake_skeleton_path_source_length\fP(3), \fIfake_skeleton_path_source_string\fP(3), \fIf_file_create()\fP, \fIf_file_is()\fP, \fIf_file_open()\fP, \fIf_file_write()\fP, \fIf_file_create()\fP, \fIf_file_is()\fP, \fIf_file_open()\fP, \fIf_file_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_skeleton_path_source_length.3 b/level_3/fake/data/documentation/man/man3/fake_skeleton_path_source_length.3
new file mode 100644 (file)
index 0000000..36a9c4f
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fake_skeleton_path_source_length "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_skeleton_path_source_length \-
+.SH SYNOPSIS
+.nf
+.B #include <skeleton.h>
+.sp
+\fBvoid fake_skeleton_path_source_length\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBconst f_string_static_t  *\fP\fIpartial\fP,
+    \fBf_string_static_t *const  \fP\fIsource\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Calculate the length of the sources path so that it can be used to manually construct a static string.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B partial
+The partial path string, such as "bash".
+
+.TP
+.B source
+The static string. The path_sources.string is not expected to be defined at this point. The path_sources.used is updated. The path_sources.size is ignored.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIskeleton.h\fP(3), \fIfake_skeleton_operate\fP(3), \fIfake_skeleton_operate_directory_create\fP(3), \fIfake_skeleton_operate_file_create\fP(3), \fIfake_skeleton_path_source_length\fP(3), \fIfake_skeleton_path_source_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_skeleton_path_source_string.3 b/level_3/fake/data/documentation/man/man3/fake_skeleton_path_source_string.3
new file mode 100644 (file)
index 0000000..cc97271
--- /dev/null
@@ -0,0 +1,149 @@
+.TH fake_skeleton_path_source_string "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_skeleton_path_source_string \-
+.SH SYNOPSIS
+.nf
+.B #include <skeleton.h>
+.sp
+\fBvoid fake_skeleton_path_source_string\fP(
+    \fBfake_data_t *const        \fP\fIdata\fP,
+    \fBconst f_string_static_t  *\fP\fIpartial\fP,
+    \fBf_string_static_t *const  \fP\fIsource\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Construct a static string array of the sources path.
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.TP
+.B partial
+The partial path string, such as "bash".
+
+.TP
+.B source
+The static string. The path_sources.string is expected to be defined and set to a size from path_sources.used + 1. The path_sources.used is updated. The path_sources.size is ignored.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIskeleton.h\fP(3), \fIfake_skeleton_operate\fP(3), \fIfake_skeleton_operate_directory_create\fP(3), \fIfake_skeleton_operate_file_create\fP(3), \fIfake_skeleton_path_source_length\fP(3), \fIfake_skeleton_path_source_string\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_string_dynamic_reset.3 b/level_3/fake/data/documentation/man/man3/fake_string_dynamic_reset.3
new file mode 100644 (file)
index 0000000..69a947e
--- /dev/null
@@ -0,0 +1,33 @@
+.TH fake_string_dynamic_reset "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_string_dynamic_reset \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_string_dynamic_reset\fP(
+    \fBf_string_dynamic_t *const \fP\fIdynamic\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset the string, performing an over-size check and shrinking if necessary.
+.PP
+This ignores errors when shrinking.
+.SH PARAMETERS
+.TP
+.B dynamic
+The string to shrink.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_iki_data_reset\fP(3), \fIfake_setting_load\fP(3), \fIfake_setting_load_parameter_callback\fP(3), \fIfake_string_dynamic_reset\fP(3), \fIfake_string_dynamics_reset\fP(3), \fIfake_string_dynamics_reset_to\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_string_dynamics_reset.3 b/level_3/fake/data/documentation/man/man3/fake_string_dynamics_reset.3
new file mode 100644 (file)
index 0000000..c503608
--- /dev/null
@@ -0,0 +1,28 @@
+.TH fake_string_dynamics_reset "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_string_dynamics_reset \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_string_dynamics_reset\fP(
+    \fBf_string_dynamics_t *const \fP\fIdynamics\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset the array of strings, performing an over-size check and shrinking if necessary.
+.PP
+This ignores errors when shrinking.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_iki_data_reset\fP(3), \fIfake_setting_load\fP(3), \fIfake_setting_load_parameter_callback\fP(3), \fIfake_string_dynamic_reset\fP(3), \fIfake_string_dynamics_reset\fP(3), \fIfake_string_dynamics_reset_to\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_string_dynamics_reset_to.3 b/level_3/fake/data/documentation/man/man3/fake_string_dynamics_reset_to.3
new file mode 100644 (file)
index 0000000..db62649
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fake_string_dynamics_reset_to "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_string_dynamics_reset_to \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fake_string_dynamics_reset_to\fP(
+    \fBf_string_dynamics_t *const \fP\fIdynamics\fP,
+    \fBconst f_number_unsigned_t  \fP\fIto\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Reset the array of strings to a specified size, performing an over-size check and shrinking if necessary.
+.PP
+This ignores errors when shrinking.
+.SH PARAMETERS
+.TP
+.B dynamics
+
+.TP
+.B to
+The number that the dynamics.used is expected to be reset to.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfake_iki_data_reset\fP(3), \fIfake_setting_load\fP(3), \fIfake_setting_load_parameter_callback\fP(3), \fIfake_string_dynamic_reset\fP(3), \fIfake_string_dynamics_reset\fP(3), \fIfake_string_dynamics_reset_to\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_thread_signal.3 b/level_3/fake/data/documentation/man/man3/fake_thread_signal.3
new file mode 100644 (file)
index 0000000..418731a
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fake_thread_signal "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * fake_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type fake_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIfake_thread_signal\fP(3), \fIfake_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIfake_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fake/data/documentation/man/man3/fake_validate_parameter_paths.3 b/level_3/fake/data/documentation/man/man3/fake_validate_parameter_paths.3
new file mode 100644 (file)
index 0000000..09b15e9
--- /dev/null
@@ -0,0 +1,97 @@
+.TH fake_validate_parameter_paths "3" "January 2026" "FLL - Featureless Make 0.8.0" "Program Functions"
+.SH "NAME"
+fake_validate_parameter_paths \-
+.SH SYNOPSIS
+.nf
+.B #include <fake.h>
+.sp
+\fBvoid fake_validate_parameter_paths\fP(
+    \fBfake_data_t *const \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Validate directories and print any relating error messages.
+.PP
+This should not be called for skeleton as in that case the directories probably do not exist.
+.PP
+This alters data.main->setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_file_exists() Errors (with error bit) from: f_file_stat()
+.SH PARAMETERS
+.TP
+.B data
+The program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The program data.
+.PP
+main: The program and settings data.
+.sp
+.RS
+.nf
+\fB
+struct fake_data_t {
+  uint8_t            \fIoperation\fP;
+  f_string_dynamic_t \fIpath_build\fP;
+  f_string_dynamic_t \fIpath_build_documentation\fP;
+  f_string_dynamic_t \fIpath_build_documents\fP;
+  f_string_dynamic_t \fIpath_build_includes\fP;
+  f_string_dynamic_t \fIpath_build_libraries\fP;
+  f_string_dynamic_t \fIpath_build_libraries_script\fP;
+  f_string_dynamic_t \fIpath_build_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_build_libraries_static\fP;
+  f_string_dynamic_t \fIpath_build_objects\fP;
+  f_string_dynamic_t \fIpath_build_objects_script\fP;
+  f_string_dynamic_t \fIpath_build_objects_shared\fP;
+  f_string_dynamic_t \fIpath_build_objects_static\fP;
+  f_string_dynamic_t \fIpath_build_programs\fP;
+  f_string_dynamic_t \fIpath_build_programs_script\fP;
+  f_string_dynamic_t \fIpath_build_programs_shared\fP;
+  f_string_dynamic_t \fIpath_build_programs_static\fP;
+  f_string_dynamic_t \fIpath_build_settings\fP;
+  f_string_dynamic_t \fIpath_build_stage\fP;
+  f_string_dynamic_t \fIpath_data_build\fP;
+  f_string_dynamic_t \fIpath_data_documentation\fP;
+  f_string_dynamic_t \fIpath_data_settings\fP;
+  f_string_dynamic_t \fIpath_documents\fP;
+  f_string_dynamic_t \fIpath_licenses\fP;
+  f_string_dynamic_t \fIpath_work_includes\fP;
+  f_string_dynamic_t \fIpath_work_libraries\fP;
+  f_string_dynamic_t \fIpath_work_libraries_script\fP;
+  f_string_dynamic_t \fIpath_work_libraries_shared\fP;
+  f_string_dynamic_t \fIpath_work_libraries_static\fP;
+  f_string_dynamic_t \fIpath_work_programs\fP;
+  f_string_dynamic_t \fIpath_work_programs_script\fP;
+  f_string_dynamic_t \fIpath_work_programs_shared\fP;
+  f_string_dynamic_t \fIpath_work_programs_static\fP;
+  f_string_dynamic_t \fIfile_data_build_defines\fP;
+  f_string_dynamic_t \fIfile_data_build_dependencies\fP;
+  f_string_dynamic_t \fIfile_data_build_fakefile\fP;
+  f_string_dynamic_t \fIfile_data_build_process_post\fP;
+  f_string_dynamic_t \fIfile_data_build_process_pre\fP;
+  f_string_dynamic_t \fIfile_data_build_settings\fP;
+  f_string_dynamic_t \fIfile_documents_readme\fP;
+  fake_main_t       *\fImain\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfake.h\fP(3), \fIfake_execute\fP(3), \fIfake_file_buffer\fP(3), \fIfake_main\fP(3), \fIfake_pipe_buffer\fP(3), \fIfake_validate_parameter_paths\fP(3), \fIf_file_exists()\fP, \fIf_file_stat()\fP, \fIf_file_exists()\fP, \fIf_file_stat()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index f030218d56b28d2f512a300ab30f5ab935fed26f..2456c72dc0e182e8964f1275025c7ca1b6eae498 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_IDENTIFY "1" "November 2025" "FLL - FSS Identify 0.8.0" "User Commands"
+.TH FSS_IDENTIFY "1" "January 2026" "FLL - FSS Identify 0.8.0" "User Commands"
 .SH NAME
 fss_identify \- Read data looking for the FSS header and parse out the FSS standard identifying information.
 .SH SYNOPSIS
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_load_line.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_load_line.3
new file mode 100644 (file)
index 0000000..427dc68
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_identify_load_line "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_load_line \-
+.SH SYNOPSIS
+.nf
+.B #include <load.h>
+.sp
+\fBvoid fss_identify_load_line\fP(
+    \fBfss_identify_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t    \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load a pipe or a file 1 block at a time untul a newline is found.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_file_stream_read_block(). Errors (with error bit) from: f_memory_array_resize().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B name
+The name of the file. file_name.used to 0 to designate that this is a pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIload.h\fP(3), \fIfss_identify_load_line\fP(3), \fIf_file_stream_read_block()\fP, \fIf_memory_array_resize()\fP, \fIf_file_stream_read_block()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_main.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_main.3
new file mode 100644 (file)
index 0000000..88f80d4
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_identify_main "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_main \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_identify.h>
+.sp
+\fBvoid fss_identify_main\fP(
+    \fBfss_identify_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received.
+.PP
+Errors (with error bit) from: f_file_stream_open() Errors (with error bit) from: fss_identify_load_line() Errors (with error bit) from: fss_identify_process()
+.SH PARAMETERS
+.TP
+.B main
+The main program and setting data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_identify.h\fP(3), \fIfss_identify_main\fP(3), \fIf_file_stream_open()\fP, \fIfss_identify_load_line()\fP, \fIfss_identify_process()\fP, \fIf_file_stream_open()\fP, \fIfss_identify_load_line()\fP, \fIfss_identify_process()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_main_delete.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_main_delete.3
new file mode 100644 (file)
index 0000000..4e103f7
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_identify_main_delete "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_identify_main_delete\fP(
+    \fBfss_identify_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_identify_main_delete\fP(3), \fIfss_identify_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIfss_identify_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_data_id.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_data_id.3
new file mode 100644 (file)
index 0000000..0a12cdc
--- /dev/null
@@ -0,0 +1,82 @@
+.TH fss_identify_print_data_id "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_data_id \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_identify_print_data_id\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_fll_id_t  \fP\fIid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the given FLL identifier.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B id
+The Identifier to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_fll_id_t {
+  char     \fIname\fP[64];
+  uint16_t \fItype\fP;
+  uint8_t  \fIused\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_identify_print_data_id\fP(3), \fIfss_identify_print_data_total\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_data_total.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_data_total.3
new file mode 100644 (file)
index 0000000..9858703
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_identify_print_data_total "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_data_total \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_identify_print_data_total\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the total.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_identify_print_data_id\fP(3), \fIfss_identify_print_data_total\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error.3
new file mode 100644 (file)
index 0000000..5cde3bb
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fss_identify_print_error "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_identify_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_identify_print_error\fP(3), \fIfss_identify_print_error_file\fP(3), \fIfss_identify_print_error_no_from\fP(3), \fIfss_identify_print_error_parameter_file_name_empty\fP(3), \fIfss_identify_print_error_parameter_file_name_invalid\fP(3), \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_file.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_file.3
new file mode 100644 (file)
index 0000000..75822c6
--- /dev/null
@@ -0,0 +1,132 @@
+.TH fss_identify_print_error_file "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_identify_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_identify_print_error\fP(3), \fIfss_identify_print_error_file\fP(3), \fIfss_identify_print_error_no_from\fP(3), \fIfss_identify_print_error_parameter_file_name_empty\fP(3), \fIfss_identify_print_error_parameter_file_name_invalid\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_no_from.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_no_from.3
new file mode 100644 (file)
index 0000000..7d0a589
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_identify_print_error_no_from "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_error_no_from \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_identify_print_error_no_from\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when no input sources (file or pipe) are provided.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_identify_print_error\fP(3), \fIfss_identify_print_error_file\fP(3), \fIfss_identify_print_error_no_from\fP(3), \fIfss_identify_print_error_parameter_file_name_empty\fP(3), \fIfss_identify_print_error_parameter_file_name_invalid\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_parameter_file_name_empty.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_parameter_file_name_empty.3
new file mode 100644 (file)
index 0000000..8c87c10
--- /dev/null
@@ -0,0 +1,67 @@
+.TH fss_identify_print_error_parameter_file_name_empty "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_error_parameter_file_name_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_identify_print_error_parameter_file_name_empty\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the file parameter is an empty string.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index within the argv[] array where the empty string is found.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_identify_print_error\fP(3), \fIfss_identify_print_error_file\fP(3), \fIfss_identify_print_error_no_from\fP(3), \fIfss_identify_print_error_parameter_file_name_empty\fP(3), \fIfss_identify_print_error_parameter_file_name_invalid\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_parameter_file_name_invalid.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_error_parameter_file_name_invalid.3
new file mode 100644 (file)
index 0000000..1fc85c4
--- /dev/null
@@ -0,0 +1,97 @@
+.TH fss_identify_print_error_parameter_file_name_invalid "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_error_parameter_file_name_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_identify_print_error_parameter_file_name_invalid\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the file parameter is invalid.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index within the argv[] array where the empty string is found.
+
+.TP
+.B name
+The parameter name value string that is invalid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_identify_print_error\fP(3), \fIfss_identify_print_error_file\fP(3), \fIfss_identify_print_error_no_from\fP(3), \fIfss_identify_print_error_parameter_file_name_empty\fP(3), \fIfss_identify_print_error_parameter_file_name_invalid\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_message_help.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_print_message_help.3
new file mode 100644 (file)
index 0000000..ff7825e
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_identify_print_message_help "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fss_identify_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_identify_print_message_help\fP(3), \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic_raw()\fP, \fIfl_print_format()\fP, \fIfll_program_print_help_header()\fP, \fIfll_program_print_help_option()\fP, \fIfll_program_print_help_option_standard()\fP, \fIfll_program_print_help_usage()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_process.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_process.3
new file mode 100644 (file)
index 0000000..c872d0d
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_identify_process "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_process \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_identify_process\fP(
+    \fBfss_identify_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t    \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given pipe or file.
+.PP
+This alters main.program.signal_received, setting it to a received signal.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.TP
+.B name
+The name of the file. file_name.used to 0 to designate that this is a pipe.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_identify_process\fP(3), \fIfss_identify_process_name_compare\fP(3), \fIfll_fss_identify()\fP, \fIfll_fss_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_process_name_compare.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_process_name_compare.3
new file mode 100644 (file)
index 0000000..090ff1a
--- /dev/null
@@ -0,0 +1,63 @@
+.TH fss_identify_process_name_compare "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_process_name_compare \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBf_status_t fss_identify_process_name_compare\fP(
+    \fBfss_identify_main_t *const \fP\fImain\fP,
+    \fBconst f_fll_id_t           \fP\fIid\fP,
+    \fBconst uint8_t              \fP\fImodes\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if the given FLL ID matches the requested range.
+.PP
+This alters main.program.signal_received, setting it to a received signal.
+.PP
+The array size must exactly match main.setting.names.used.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.TP
+.B id
+The identifier to compare against.
+
+.TP
+.B modes
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_fll_id_t {
+  char     \fIname\fP[64];
+  uint16_t \fItype\fP;
+  uint8_t  \fIused\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_equal_to on match. F_equal_to_not on no match or on error.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_identify_process\fP(3), \fIfss_identify_process_name_compare\fP(3), \fIf_compare_dynamic_partial_string()\fP, \fIf_compare_dynamic_string()\fP, \fIfl_conversion_dynamic_partial_to_hexidecimal_unsigned()\fP, \fIf_compare_dynamic_string()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_setting_delete.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_setting_delete.3
new file mode 100644 (file)
index 0000000..608768f
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fss_identify_setting_delete "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_identify_setting_delete\fP(
+    \fBfss_identify_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The fss identify main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+files: The files to process.
+.sp
+.RS
+.nf
+\fB
+struct fss_identify_setting_t {
+  uint16_t            \fIflag\fP;
+  f_state_t           \fIstate\fP;
+  f_number_unsigned_t \fIcurrent\fP;
+  f_number_unsigned_t \fIline\fP;
+  f_number_unsigned_t \fItotal\fP;
+  f_range_t           \fIrange\fP;
+  f_file_t            \fIfile\fP;
+  f_string_dynamic_t  \fIbuffer\fP;
+  f_fll_ids_t         \fIids\fP;
+  f_string_dynamics_t \fInames\fP;
+  f_string_dynamics_t \fIfiles\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_identify_main_delete\fP(3), \fIfss_identify_setting_delete\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_setting_load.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_setting_load.3
new file mode 100644 (file)
index 0000000..a451548
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_identify_setting_load "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fss_identify_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBfss_identify_main_t *const  \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: fll_program_parameter_process_context_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data and settings.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfss_identify_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_signal_handler.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_signal_handler.3
new file mode 100644 (file)
index 0000000..46b7986
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_identify_signal_handler "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid fss_identify_signal_handler\fP(
+    \fBfss_identify_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIfss_identify_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_identify/data/documentation/man/man3/fss_identify_thread_signal.3 b/level_3/fss_identify/data/documentation/man/man3/fss_identify_thread_signal.3
new file mode 100644 (file)
index 0000000..c441344
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_identify_thread_signal "3" "January 2026" "FLL - FSS Identify 0.8.0" "Program Functions"
+.SH "NAME"
+fss_identify_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * fss_identify_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type fss_identify_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIfss_identify_thread_signal\fP(3), \fIfss_identify_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIfss_identify_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 319a22e0595bbc9e3cb91205b3b54a3ed75366c5..39c949cfb8618fe89be8c639a88d33e3893b45dc 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_BASIC_LIST_READ "1" "November 2025" "FLL - FSS Basic List Read 0.8.0" "User Commands"
+.TH FSS_BASIC_LIST_READ "1" "January 2026" "FLL - FSS Basic List Read 0.8.0" "User Commands"
 .SH NAME
 fss_basic_list_read \- Read data in \fBFSS-0003 (Basic List)\fR format.
 .SH SYNOPSIS
index 80432fc93dc3bb192e614bed4e1bbec7ae53bbe1..bbc3a99e97be824cbbb139ba80c4dd88d9936260 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_BASIC_READ "1" "November 2025" "FLL - FSS Basic Read 0.8.0" "User Commands"
+.TH FSS_BASIC_READ "1" "January 2026" "FLL - FSS Basic Read 0.8.0" "User Commands"
 .SH NAME
 fss_basic_read \- Read data in \fBFSS-0000 (Basic)\fR format.
 .SH SYNOPSIS
index 6ae318050c0622cd3c186602764b03ca9ab634c9..e38df9fb65a3b172eabb73315869e23018483f53 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_EMBEDDED_LIST_READ "1" "November 2025" "FLL - FSS Embedded List Read 0.8.0" "User Commands"
+.TH FSS_EMBEDDED_LIST_READ "1" "January 2026" "FLL - FSS Embedded List Read 0.8.0" "User Commands"
 .SH NAME
 fss_embedded_list_read \- Read data in \fBFSS-0008 (Embedded List)\fR format.
 .SH SYNOPSIS
@@ -18,8 +18,8 @@ When this order of operations is in effect, parameters to the right of a depth p
   \fB\-\-name\fR: An Object name at the specified depth.
 
 The parameter \fB\-\-depth\fR must be in numeric order, but values in between may be skipped.
-  (\fB'\-d 0 \-a 1 \-d 2 \-a 2\fR' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)
-  (\fB'\-d 2 \-a 1 \-d 0 \-a 2\fR' would be invalid because depth 2 is before depth 1.)
+  ('\fB\-d 0 \-a 1 \-d 2 \-a 2\fR' would specify index 1 at depth 0, any index at depth 1, and index 2 at depth 2.)
+  ('\fB\-d 2 \-a 1 \-d 0 \-a 2\fR' would be invalid because depth 2 is before depth 1.)
 
 The parameter \fB\-\-select\fR selects a Content column.
 
index 52156fda6eb5f0cf8f1c6e77b5a84359f2f80f4b..b8fc6dbea67d8af35c60a3ab8beeb312a7d1f61d 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_EMBEDDED_LIST_READ "1" "November 2025" "FLL - FSS Embedded List Write 0.8.0" "User Commands"
+.TH FSS_EMBEDDED_LIST_READ "1" "January 2026" "FLL - FSS Embedded List Write 0.8.0" "User Commands"
 .SH NAME
 fss_extended_list_read \- Read data in \fBFSS-0003 (Extended List)\fR format.
 .SH SYNOPSIS
index dd829fbdc4ed1db727bd68100b39e4e63f9b0f1a..090197ba40fb20c299b47eed7103029b9260f966 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_EXTENDED_READ "1" "November 2025" "FLL - FSS Extended Read 0.8.0" "User Commands"
+.TH FSS_EXTENDED_READ "1" "January 2026" "FLL - FSS Extended Read 0.8.0" "User Commands"
 .SH NAME
 fss_extended_read \- Read data in \fBFSS-0001 (Extended)\fR format.
 .SH SYNOPSIS
index f907d7d194c82d2dcc2a415904b586c1d9cdb09f..9222bf7144aaa5c0f5e5466bee1ccbb8c18736ad 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_PAYLOAD_READ "1" "November 2025" "FLL - FSS Payload Read 0.8.0" "User Commands"
+.TH FSS_PAYLOAD_READ "1" "January 2026" "FLL - FSS Payload Read 0.8.0" "User Commands"
 .SH NAME
 fss_payload_read \- Read data in \fBFSS-000E (Payload)\fR format.
 .SH SYNOPSIS
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_print_message_help.3
new file mode 100644 (file)
index 0000000..5cadae5
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_basic_list_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_list_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_basic_list_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-0002 (Basic List).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_basic_list_print_message_help\fP(3), \fIfss_read_basic_list_print_object_end\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_print_object_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_print_object_end.3
new file mode 100644 (file)
index 0000000..4bdcb75
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_basic_list_print_object_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_list_print_object_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_basic_list_print_object_end\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content).
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_basic_list_print_message_help\fP(3), \fIfss_read_basic_list_print_object_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_process_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_process_help.3
new file mode 100644 (file)
index 0000000..e0782a3
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_basic_list_process_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_list_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_basic_list_process_help\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0002 (Basic List).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_basic_list_process_help\fP(3), \fIfss_read_basic_list_process_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_process_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_list_process_load.3
new file mode 100644 (file)
index 0000000..f088a1c
--- /dev/null
@@ -0,0 +1,43 @@
+.TH fss_read_basic_list_process_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_list_process_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_basic_list_process_load\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the buffer, loading the FSS data.
+.PP
+This will print an error message on error.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_data_not_stop (with warning bit) on no valid FSS data found and reached stopping point. F_data_not_eos (with warning bit) on no valid FSS data found and reached end of string.
+.PP
+Errors (with error bit) from: fll_fss_basic_list_read()
+.PP
+Errors (with error bit) from: fss_read_ensure_quotes_length()
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_basic_list_process_help\fP(3), \fIfss_read_basic_list_process_load\fP(3), \fIfll_fss_basic_list_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfll_fss_basic_list_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfss_read_file_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_print_message_help.3
new file mode 100644 (file)
index 0000000..aa04090
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_basic_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_basic_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-0000 (Basic).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_basic_print_message_help\fP(3), \fIfss_read_basic_print_object_end\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_print_object_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_print_object_end.3
new file mode 100644 (file)
index 0000000..794aa2e
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_basic_print_object_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_print_object_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_basic_print_object_end\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content).
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_basic_print_message_help\fP(3), \fIfss_read_basic_print_object_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_process_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_process_help.3
new file mode 100644 (file)
index 0000000..46d8e22
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_basic_process_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_basic_process_help\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0000 (Basic).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_basic_process_help\fP(3), \fIfss_read_basic_process_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_basic_process_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_basic_process_load.3
new file mode 100644 (file)
index 0000000..50ecd8f
--- /dev/null
@@ -0,0 +1,43 @@
+.TH fss_read_basic_process_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_basic_process_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_basic_process_load\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the buffer, loading the FSS data.
+.PP
+This will print an error message on error.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_data_not_stop (with warning bit) on no valid FSS data found and reached stopping point. F_data_not_eos (with warning bit) on no valid FSS data found and reached end of string.
+.PP
+Errors (with error bit) from: fll_fss_basic_read()
+.PP
+Errors (with error bit) from: fss_read_ensure_quotes_length()
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_basic_process_help\fP(3), \fIfss_read_basic_process_load\fP(3), \fIfll_fss_basic_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfll_fss_basic_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfss_read_file_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_cache_delete.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_cache_delete.3
new file mode 100644 (file)
index 0000000..59abd46
--- /dev/null
@@ -0,0 +1,53 @@
+.TH fss_read_cache_delete "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_cache_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_read_cache_delete\fP(
+    \fBfss_read_cache_t *const \fP\fIcache\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main cache data.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B cache
+The cache data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The FSS Read cache.
+.PP
+objects: An Objects array used by the fll_fss_embedded_list_read() function. positions: A positions array used by the fll_fss_embedded_list_read() function. slashes: A slashes array used by the fll_fss_embedded_list_read() function.
+.sp
+.RS
+.nf
+\fB
+struct fss_read_cache_t {
+  f_ranges_t           \fIobjects\fP;
+  f_number_unsigneds_t \fIpositions\fP;
+  f_number_unsigneds_t \fIslashes\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_read_cache_delete\fP(3), \fIfss_read_depth_delete\fP(3), \fIfss_read_depths_resize\fP(3), \fIfss_read_files_resize\fP(3), \fIfss_read_main_delete\fP(3), \fIfss_read_setting_delete\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_delimit_content_is.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_delimit_content_is.3
new file mode 100644 (file)
index 0000000..5c7822c
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_read_delimit_content_is "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_delimit_content_is \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBf_status_t fss_read_delimit_content_is\fP(
+    \fBfss_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIdepth\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if the given depth is to be delimited or not for Content.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B depth
+The depth to check.
+
+.SH RETURN VALUE
+.PP
+F_true if to apply delimits. F_false if to not apply delimits (fallback when main is NULL).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_delimit_content_is\fP(3), \fIfss_read_delimit_object_is\fP(3), \fIfss_read_file_identify\fP(3), \fIfss_read_main\fP(3), \fIfss_read_process_last_line\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_delimit_object_is.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_delimit_object_is.3
new file mode 100644 (file)
index 0000000..16cc382
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_read_delimit_object_is "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_delimit_object_is \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBf_status_t fss_read_delimit_object_is\fP(
+    \fBfss_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIdepth\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine if the given depth is to be delimited or not for an Object.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B depth
+The depth to check.
+
+.SH RETURN VALUE
+.PP
+F_true if to apply delimits. F_false if to not apply delimits (fallback when main is NULL).
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_delimit_content_is\fP(3), \fIfss_read_delimit_object_is\fP(3), \fIfss_read_file_identify\fP(3), \fIfss_read_main\fP(3), \fIfss_read_process_last_line\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_depth_delete.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_depth_delete.3
new file mode 100644 (file)
index 0000000..026debf
--- /dev/null
@@ -0,0 +1,59 @@
+.TH fss_read_depth_delete "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_depth_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_read_depth_delete\fP(
+    \fBfss_read_depth_t *const \fP\fIdepth\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate the read depth.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B depth
+The depth to de-allocate.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure of parameters applied at some depth.
+.PP
+depth: The depth number in which this is to be processed at.
+.PP
+index_at: Position of the "--at" parameter value in the argv list, when 0 there is no parameter. index_name: Position of the "--name" parameter value in the argv list, when 0 there is no parameter.
+.PP
+value_at: The value of the "--at" parameter, already processed and ready to use, only when index_at > 0. value_name: The value of the "--name" parameter, already processed and ready to use, only when index_name > 0.
+.sp
+.RS
+.nf
+\fB
+struct fss_read_depth_t {
+  f_number_unsigned_t \fIdepth\fP;
+  f_number_unsigned_t \fIindex_at\fP;
+  f_number_unsigned_t \fIindex_name\fP;
+  f_number_unsigned_t \fIvalue_at\fP;
+  f_string_dynamic_t  \fIvalue_name\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_read_cache_delete\fP(3), \fIfss_read_depth_delete\fP(3), \fIfss_read_depths_resize\fP(3), \fIfss_read_files_resize\fP(3), \fIfss_read_main_delete\fP(3), \fIfss_read_setting_delete\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_depths_resize.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_depths_resize.3
new file mode 100644 (file)
index 0000000..9ca14e8
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fss_read_depths_resize "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_depths_resize \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBf_status_t fss_read_depths_resize\fP(
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBfss_read_depths_t *const  \fP\fIdepths\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the program setting depths data.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B length
+The new size to use.
+
+.TP
+.B depths
+The depths to resize.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of depth parameters.
+.PP
+array: The array of depths. size: Total amount of allocated space. used: Total number of allocated spaces used.
+.sp
+.RS
+.nf
+\fB
+struct fss_read_depths_t {
+  fss_read_depth_t   *\fIarray\fP;
+  f_number_unsigned_t \fIsize\fP;
+  f_number_unsigned_t \fIused\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_read_cache_delete\fP(3), \fIfss_read_depth_delete\fP(3), \fIfss_read_depths_resize\fP(3), \fIfss_read_files_resize\fP(3), \fIfss_read_main_delete\fP(3), \fIfss_read_setting_delete\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_message_help.3
new file mode 100644 (file)
index 0000000..fc146da
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_embedded_list_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_embedded_list_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-0008 (Embedded List).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_embedded_list_print_message_help\fP(3), \fIfss_read_embedded_list_print_object_end\fP(3), \fIfss_read_embedded_list_print_set_end\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_object_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_object_end.3
new file mode 100644 (file)
index 0000000..b34f5ca
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_embedded_list_print_object_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_print_object_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_embedded_list_print_object_end\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content).
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_embedded_list_print_message_help\fP(3), \fIfss_read_embedded_list_print_object_end\fP(3), \fIfss_read_embedded_list_print_set_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_set_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_print_set_end.3
new file mode 100644 (file)
index 0000000..5c3842a
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fss_read_embedded_list_print_set_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_print_set_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_embedded_list_print_set_end\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIclose\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object/Content set.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B close
+The position within the close array representing the range within the buffer for the close string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_embedded_list_print_message_help\fP(3), \fIfss_read_embedded_list_print_object_end\fP(3), \fIfss_read_embedded_list_print_set_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process.3
new file mode 100644 (file)
index 0000000..a89cbb5
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_read_embedded_list_process "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_process \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_embedded_list_process\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process normally, reading from the input for the Embedded List FSS format.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: macro_fss_read_signal_check().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_embedded_list_process\fP(3), \fIfss_read_embedded_list_process_determine_depth\fP(3), \fIfss_read_embedded_list_process_determine_depth_nest_recurse\fP(3), \fIfss_read_embedded_list_process_determine_depth_save\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth.3
new file mode 100644 (file)
index 0000000..450cfc0
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_read_embedded_list_process_determine_depth "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_process_determine_depth \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_embedded_list_process_determine_depth\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the depth in which the processing will happen and construct the Objects and Contents mapping based on this.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: macro_fss_read_signal_check().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_embedded_list_process\fP(3), \fIfss_read_embedded_list_process_determine_depth\fP(3), \fIfss_read_embedded_list_process_determine_depth_nest_recurse\fP(3), \fIfss_read_embedded_list_process_determine_depth_save\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth_nest_recurse.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth_nest_recurse.3
new file mode 100644 (file)
index 0000000..58358ea
--- /dev/null
@@ -0,0 +1,49 @@
+.TH fss_read_embedded_list_process_determine_depth_nest_recurse "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_process_determine_depth_nest_recurse \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_embedded_list_process_determine_depth_nest_recurse\fP(
+    \fBfss_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIparent\fP,
+    \fBconst f_number_unsigned_t \fP\fInext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Recursively determine the depth.
+.PP
+This is intended to be directly called by fss_read_embedded_list_process_determine_depth().
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Must be greater than 0.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B parent
+The index position of the parent element. This is needed because the items array for some depth is tied to the parent via a property.
+
+.TP
+.B next
+The next index position in the depths array to process.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_embedded_list_process\fP(3), \fIfss_read_embedded_list_process_determine_depth\fP(3), \fIfss_read_embedded_list_process_determine_depth_nest_recurse\fP(3), \fIfss_read_embedded_list_process_determine_depth_save\fP(3), \fIfss_read_embedded_list_process_determine_depth()\fP, \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth_save.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_determine_depth_save.3
new file mode 100644 (file)
index 0000000..9e6943a
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fss_read_embedded_list_process_determine_depth_save "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_process_determine_depth_save \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_embedded_list_process_determine_depth_save\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP,
+    \fBf_fss_item_t *const    \fP\fIitem\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Save the given item, appending the parts to the appropriate settings arrays.
+.PP
+This is intended to be directly called by fss_read_embedded_list_process_determine_depth() and fss_read_embedded_list_process_determine_depth_nest_recurse().
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_memory_array_increase().
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B item
+The item to save.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+This holds a item object and its associated content.
+.PP
+Child content represents content nested within some other content and never represents the top-most content.
+.PP
+To designate that either object or content is non-existent, set start position greater than stop position. In particular, set start to 1 and stop to 0.
+.PP
+This does not have resize/adjust macros due to multiple things to potentially resize. Any resizing must be manually performed on each applicable property.
+.PP
+parent: A location referencing a parent Object or Content that this Object Content is nested under.
+.sp
+.RS
+.nf
+\fB
+struct f_fss_item_t {
+  f_range_t           \fIobject\fP;
+  f_range_t           \fIclose\fP;
+  f_ranges_t          \fIcontent\fP;
+  f_number_unsigned_t \fIparent\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_embedded_list_process\fP(3), \fIfss_read_embedded_list_process_determine_depth\fP(3), \fIfss_read_embedded_list_process_determine_depth_nest_recurse\fP(3), \fIfss_read_embedded_list_process_determine_depth_save\fP(3), \fIfss_read_embedded_list_process_determine_depth()\fP, \fIfss_read_embedded_list_process_determine_depth_nest_recurse()\fP, \fIf_memory_array_increase()\fP, \fIf_memory_array_increase()\fP, \fIfss_read_embedded_list_process_determine_depth()\fP, \fIfss_read_embedded_list_process_determine_depth_nest_recurse()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_help.3
new file mode 100644 (file)
index 0000000..97126e9
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_embedded_list_process_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_embedded_list_process_help\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0008 (Embedded List).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_embedded_list_process_help\fP(3), \fIfss_read_embedded_list_process_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_embedded_list_process_load.3
new file mode 100644 (file)
index 0000000..06206ad
--- /dev/null
@@ -0,0 +1,43 @@
+.TH fss_read_embedded_list_process_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_embedded_list_process_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_embedded_list_process_load\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the buffer, loading the FSS data.
+.PP
+This will print an error message on error.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_data_not_stop (with warning bit) on no valid FSS data found and reached stopping point. F_data_not_eos (with warning bit) on no valid FSS data found and reached end of string.
+.PP
+Errors (with error bit) from: fll_fss_embedded_list_read()
+.PP
+Errors (with error bit) from: fss_read_ensure_quotes_length()
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_embedded_list_process_help\fP(3), \fIfss_read_embedded_list_process_load\fP(3), \fIfll_fss_embedded_list_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfll_fss_embedded_list_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfss_read_file_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_ensure_quotes_length.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_ensure_quotes_length.3
new file mode 100644 (file)
index 0000000..0b4ba05
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_read_ensure_quotes_length "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_ensure_quotes_length \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fss_read_ensure_quotes_length\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Make sure the array size of quotes_object and quotes_content matches the respective objects and contents.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_memory_array_resize(). Errors (with error bit) from: f_memory_arrays_resize().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfss_read_ensure_quotes_length\fP(3), \fIfss_read_setting_load\fP(3), \fIfss_read_setting_load_depth\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_message_help.3
new file mode 100644 (file)
index 0000000..290616d
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_extended_list_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_list_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_extended_list_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-0003 (Extended List).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_extended_list_print_message_help\fP(3), \fIfss_read_extended_list_print_object_end\fP(3), \fIfss_read_extended_list_print_set_end\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_object_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_object_end.3
new file mode 100644 (file)
index 0000000..6efa299
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_extended_list_print_object_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_list_print_object_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_extended_list_print_object_end\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content).
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_extended_list_print_message_help\fP(3), \fIfss_read_extended_list_print_object_end\fP(3), \fIfss_read_extended_list_print_set_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_set_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_print_set_end.3
new file mode 100644 (file)
index 0000000..2ff69aa
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fss_read_extended_list_print_set_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_list_print_set_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_extended_list_print_set_end\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIclose\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object/Content set.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B close
+The position within the close array representing the range within the buffer for the close string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_extended_list_print_message_help\fP(3), \fIfss_read_extended_list_print_object_end\fP(3), \fIfss_read_extended_list_print_set_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_process_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_process_help.3
new file mode 100644 (file)
index 0000000..447a49e
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_extended_list_process_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_list_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_extended_list_process_help\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0003 (Extended List).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_extended_list_process_help\fP(3), \fIfss_read_extended_list_process_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_process_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_list_process_load.3
new file mode 100644 (file)
index 0000000..5d094bf
--- /dev/null
@@ -0,0 +1,43 @@
+.TH fss_read_extended_list_process_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_list_process_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_extended_list_process_load\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the buffer, loading the FSS data.
+.PP
+This will print an error message on error.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_data_not_stop (with warning bit) on no valid FSS data found and reached stopping point. F_data_not_eos (with warning bit) on no valid FSS data found and reached end of string.
+.PP
+Errors (with error bit) from: fll_fss_extended_list_read()
+.PP
+Errors (with error bit) from: fss_read_ensure_quotes_length()
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_extended_list_process_help\fP(3), \fIfss_read_extended_list_process_load\fP(3), \fIfll_fss_extended_list_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfll_fss_extended_list_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfss_read_file_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_content_next.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_content_next.3
new file mode 100644 (file)
index 0000000..a9ee993
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fss_read_extended_print_content_next "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_print_content_next \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_extended_print_content_next\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the next part of a Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+This is not the Content set end.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_extended_print_content_next\fP(3), \fIfss_read_extended_print_message_help\fP(3), \fIfss_read_extended_print_object_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_message_help.3
new file mode 100644 (file)
index 0000000..1b0fb79
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_extended_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_extended_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-0001 (Extended).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_extended_print_content_next\fP(3), \fIfss_read_extended_print_message_help\fP(3), \fIfss_read_extended_print_object_end\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_object_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_print_object_end.3
new file mode 100644 (file)
index 0000000..89151fe
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_extended_print_object_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_print_object_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_extended_print_object_end\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content).
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_extended_print_content_next\fP(3), \fIfss_read_extended_print_message_help\fP(3), \fIfss_read_extended_print_object_end\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_content.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_content.3
new file mode 100644 (file)
index 0000000..5540eed
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_extended_process_content "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_process_content \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_extended_process_content\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t          \fP\fIlast\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Content, printing the FSS-0001 (Extended) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B last
+If TRUE, then this is the last Content in the Content set. If FALSE, then this is not the last Content in the Content set.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_extended_process_content\fP(3), \fIfss_read_extended_process_help\fP(3), \fIfss_read_extended_process_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_help.3
new file mode 100644 (file)
index 0000000..9e40a42
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_extended_process_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_extended_process_help\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0001 (Extended).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_extended_process_content\fP(3), \fIfss_read_extended_process_help\fP(3), \fIfss_read_extended_process_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_extended_process_load.3
new file mode 100644 (file)
index 0000000..041612e
--- /dev/null
@@ -0,0 +1,43 @@
+.TH fss_read_extended_process_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_extended_process_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_extended_process_load\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the buffer, loading the FSS data.
+.PP
+This will print an error message on error.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_data_not_stop (with warning bit) on no valid FSS data found and reached stopping point. F_data_not_eos (with warning bit) on no valid FSS data found and reached end of string.
+.PP
+Errors (with error bit) from: fll_fss_extended_read()
+.PP
+Errors (with error bit) from: fss_read_ensure_quotes_length()
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_extended_process_content\fP(3), \fIfss_read_extended_process_help\fP(3), \fIfss_read_extended_process_load\fP(3), \fIfll_fss_extended_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfll_fss_extended_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfss_read_file_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_file_identify.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_file_identify.3
new file mode 100644 (file)
index 0000000..3064431
--- /dev/null
@@ -0,0 +1,65 @@
+.TH fss_read_file_identify "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_file_identify \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBf_string_static_t fss_read_file_identify\fP(
+    \fBconst f_number_unsigned_t \fP\fIat\fP,
+    \fBconst fss_read_files_t    \fP\fIfiles\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Get the name of the file the given position represents within the buffer.
+.PP
+On failure to identify, an empty string is returned.
+.SH PARAMETERS
+.TP
+.B at
+The position within the buffer.
+
+.TP
+.B files
+The representation of files and their respective ranges within the buffer.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of files.
+.PP
+This is intended to be defined and used statically allocated and as such no dynamic allocation or dynamic deallocation methods are provided.
+.PP
+The STDIN pipe is reserved for index 0 and as such the first index must be reserved and the used should be set to at least 1.
+.PP
+array: The array of depths. size: Total amount of allocated space. used: Total number of allocated spaces used.
+.sp
+.RS
+.nf
+\fB
+struct fss_read_files_t {
+  fss_read_file_t    *\fIarray\fP;
+  f_number_unsigned_t \fIsize\fP;
+  f_number_unsigned_t \fIused\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+A string with the name when found. NULL is returned if the range represents the STDIN pipe.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_delimit_content_is\fP(3), \fIfss_read_delimit_object_is\fP(3), \fIfss_read_file_identify\fP(3), \fIfss_read_main\fP(3), \fIfss_read_process_last_line\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_files_resize.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_files_resize.3
new file mode 100644 (file)
index 0000000..1989ceb
--- /dev/null
@@ -0,0 +1,69 @@
+.TH fss_read_files_resize "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_files_resize \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBf_status_t fss_read_files_resize\fP(
+    \fBconst f_number_unsigned_t \fP\fIlength\fP,
+    \fBfss_read_files_t *const   \fP\fIfiles\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Resize the program setting files data.
+.PP
+Must not be NULL.
+.PP
+F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_memory_resize().
+.SH PARAMETERS
+.TP
+.B length
+The new size to use.
+
+.TP
+.B files
+The files to resize.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of files.
+.PP
+This is intended to be defined and used statically allocated and as such no dynamic allocation or dynamic deallocation methods are provided.
+.PP
+The STDIN pipe is reserved for index 0 and as such the first index must be reserved and the used should be set to at least 1.
+.PP
+array: The array of depths. size: Total amount of allocated space. used: Total number of allocated spaces used.
+.sp
+.RS
+.nf
+\fB
+struct fss_read_files_t {
+  fss_read_file_t    *\fIarray\fP;
+  f_number_unsigned_t \fIsize\fP;
+  f_number_unsigned_t \fIused\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_read_cache_delete\fP(3), \fIfss_read_depth_delete\fP(3), \fIfss_read_depths_resize\fP(3), \fIfss_read_files_resize\fP(3), \fIfss_read_main_delete\fP(3), \fIfss_read_setting_delete\fP(3), \fIf_memory_resize()\fP, \fIf_memory_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_main.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_main.3
new file mode 100644 (file)
index 0000000..2946460
--- /dev/null
@@ -0,0 +1,39 @@
+.TH fss_read_main "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_main \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_main\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success. F_true on success when performing verification and verify passed. F_false on success when performing verification and verify failed.
+.PP
+Errors (with error bit) from: main.call.process().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_delimit_content_is\fP(3), \fIfss_read_delimit_object_is\fP(3), \fIfss_read_file_identify\fP(3), \fIfss_read_main\fP(3), \fIfss_read_process_last_line\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_main_delete.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_main_delete.3
new file mode 100644 (file)
index 0000000..51519d6
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_read_main_delete "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_read_main_delete\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_read_cache_delete\fP(3), \fIfss_read_depth_delete\fP(3), \fIfss_read_depths_resize\fP(3), \fIfss_read_files_resize\fP(3), \fIfss_read_main_delete\fP(3), \fIfss_read_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIfss_read_cache_delete()\fP, \fIfss_read_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_main_print_error_format_unknown.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_main_print_error_format_unknown.3
new file mode 100644 (file)
index 0000000..19bffe3
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fss_read_main_print_error_format_unknown "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_main_print_error_format_unknown \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_main_print_error_format_unknown\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about a value given to the as parameter being unknown.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B value
+A string representing the value that is of an unknown format.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_main_print_error_format_unknown\fP(3), \fIfss_read_main_print_error_parameter_as_changed\fP(3), \fIfss_read_main_print_message_help\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_main_print_error_parameter_as_changed.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_main_print_error_parameter_as_changed.3
new file mode 100644 (file)
index 0000000..567a15b
--- /dev/null
@@ -0,0 +1,122 @@
+.TH fss_read_main_print_error_parameter_as_changed "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_main_print_error_parameter_as_changed \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_main_print_error_parameter_as_changed\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIprevious\fP,
+    \fBconst f_string_static_t \fP\fIcurrent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about a value given to the as parameter changed after re-loading.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B previous
+A string representing the value of the previous as parameter.
+
+.TP
+.B current
+A string representing the value of the current as parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_main_print_error_format_unknown\fP(3), \fIfss_read_main_print_error_parameter_as_changed\fP(3), \fIfss_read_main_print_message_help\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_main_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_main_print_message_help.3
new file mode 100644 (file)
index 0000000..578e362
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_main_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_main_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_main_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for "main" fss_read.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_main_print_error_format_unknown\fP(3), \fIfss_read_main_print_error_parameter_as_changed\fP(3), \fIfss_read_main_print_message_help\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_content.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_content.3
new file mode 100644 (file)
index 0000000..dcff134
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fss_read_payload_print_content "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_content \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_content\fP(
+    \fBfl_print_t *const          \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t  \fP\fIat\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst uint8_t              \fP\fIquote\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+(FSS Payload specific) Print the Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+This processes single Content range. This does not print a new line after the Content.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B at
+The Object index position to be processed.
+
+.TP
+.B range
+The range within the buffer representing the Content to print.
+
+.TP
+.B quote
+The quote type representing the character to use (from the f_fss_quote_type_*_e).
+
+.TP
+.B delimits
+The delimits array representing a delimited Content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3), \fIfss_read_main_t\fP, \fImain.call.print_content()\fP, \fImain.call.print_object_end()\fP, \fImain.call.print_set_end()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_error_parameter_value_payload.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_error_parameter_value_payload.3
new file mode 100644 (file)
index 0000000..a4966b4
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fss_read_payload_print_error_parameter_value_payload "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_error_parameter_value_payload \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_error_parameter_value_payload\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about the payload parameter not having a valid value.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B value
+The parameter value that is invalid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help.3
new file mode 100644 (file)
index 0000000..8fbfc66
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_payload_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-000E (Payload).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help_payload.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help_payload.3
new file mode 100644 (file)
index 0000000..137b5a9
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_payload_print_message_help_payload "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_message_help_payload \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_message_help_payload\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print payload-specific help parameters details for FSS-000E (Payload).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help_special.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_message_help_special.3
new file mode 100644 (file)
index 0000000..69687d3
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_payload_print_message_help_special "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_message_help_special \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_message_help_special\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print payload-specific help special parameters for FSS-000E (Payload).
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_object_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_object_end.3
new file mode 100644 (file)
index 0000000..b21f688
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_payload_print_object_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_object_end \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_object_end\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content).
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_problem_payload_missing.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_print_problem_payload_missing.3
new file mode 100644 (file)
index 0000000..bbb4ddc
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_read_payload_print_problem_payload_missing "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_print_problem_payload_missing \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_read_payload_print_problem_payload_missing\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error or warning message about the "payload" not being found.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_read_payload_print_content\fP(3), \fIfss_read_payload_print_error_parameter_value_payload\fP(3), \fIfss_read_payload_print_message_help\fP(3), \fIfss_read_payload_print_message_help_payload\fP(3), \fIfss_read_payload_print_message_help_special\fP(3), \fIfss_read_payload_print_object_end\fP(3), \fIfss_read_payload_print_problem_payload_missing\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_help.3
new file mode 100644 (file)
index 0000000..e60d4a1
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_payload_process_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_payload_process_help\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-000E (Payload).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_payload_process_help\fP(3), \fIfss_read_payload_process_load\fP(3), \fIfss_read_payload_process_set\fP(3), \fIfss_read_payload_setting_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_load.3
new file mode 100644 (file)
index 0000000..68d7e1f
--- /dev/null
@@ -0,0 +1,43 @@
+.TH fss_read_payload_process_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_process_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_payload_process_load\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the buffer, loading the FSS data.
+.PP
+This will print an error message on error.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_data_not_stop (with warning bit) on no valid FSS data found and reached stopping point. F_data_not_eos (with warning bit) on no valid FSS data found and reached end of string.
+.PP
+Errors (with error bit) from: fll_fss_payload_read()
+.PP
+Errors (with error bit) from: fss_read_ensure_quotes_length()
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_payload_process_help\fP(3), \fIfss_read_payload_process_load\fP(3), \fIfss_read_payload_process_set\fP(3), \fIfss_read_payload_setting_load\fP(3), \fIfll_fss_payload_read()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfss_read_ensure_quotes_length()\fP, \fIfll_fss_payload_read()\fP, \fIfss_read_file_identify()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_set.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_process_set.3
new file mode 100644 (file)
index 0000000..8c44fcd
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_read_payload_process_set "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_process_set \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_payload_process_set\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given object and content, printing the FSS if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_payload_process_help\fP(3), \fIfss_read_payload_process_load\fP(3), \fIfss_read_payload_process_set\fP(3), \fIfss_read_payload_setting_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_payload_setting_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_payload_setting_load.3
new file mode 100644 (file)
index 0000000..e80f178
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_payload_setting_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_payload_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_payload_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBfss_read_main_t *const      \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the payload-specific program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters setting.state.status: F_okay on success.
+.PP
+F_parameter (with error bit) on parameter error.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success but nothing was provided to operate with.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_payload_process_help\fP(3), \fIfss_read_payload_process_load\fP(3), \fIfss_read_payload_process_set\fP(3), \fIfss_read_payload_setting_load\fP(3), \fIfss_read_setting_load()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_at.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_at.3
new file mode 100644 (file)
index 0000000..a71a9dd
--- /dev/null
@@ -0,0 +1,125 @@
+.TH fss_read_print_at "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_at \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_at\fP(
+    \fBfl_print_t *const          \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t  \fP\fIat\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits_object\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits_content\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process printing the buffer according to an Object index position and given delimits.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+This processes multiple Content ranges and calls main.call.print_content() for each individual Content range.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B at
+The Object index to be printed.
+
+.TP
+.B delimits_object
+The delimits array representing a delimited Object. This represents the positions within the current Object at the "at" position.
+
+.TP
+.B delimits_content
+The delimits array representing a delimited Content. This represents the positions within the current Content at the "at" position.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP, \fImain.call.print_content()\fP, \fImain.call.print_object()\fP, \fImain.call.print_object_end()\fP, \fImain.call.print_set_end()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_content.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_content.3
new file mode 100644 (file)
index 0000000..44d2a3b
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fss_read_print_content "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_content \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_content\fP(
+    \fBfl_print_t *const          \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t  \fP\fIat\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst uint8_t              \fP\fIquote\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+This processes single Content range. This does not print a new line after the Content.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B at
+The Object index to be printed.
+
+.TP
+.B range
+The range within the buffer representing the Content to print.
+
+.TP
+.B quote
+The quote type representing the character to use (from the f_fss_quote_type_*_e).
+
+.TP
+.B delimits
+The delimits array representing a delimited Content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP, \fImain.call.print_content()\fP, \fImain.call.print_object_end()\fP, \fImain.call.print_set_end()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_content_empty.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_content_empty.3
new file mode 100644 (file)
index 0000000..c1556ae
--- /dev/null
@@ -0,0 +1,72 @@
+.TH fss_read_print_content_empty "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_content_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_content_empty\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the "empty" Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+This only prints the end Content start pipe character. This does not print the Content end pipe character to avoid conflicting with the calls to the set end function.
+.PP
+This does not print the Content set end.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_content_ignore.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_content_ignore.3
new file mode 100644 (file)
index 0000000..4749b85
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_print_content_ignore "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_content_ignore \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_content_ignore\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the ignore character for Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP, \fIfll_print_dynamic_raw()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error.3
new file mode 100644 (file)
index 0000000..9bb70b8
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fss_read_print_error "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP, \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_file.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_file.3
new file mode 100644 (file)
index 0000000..7d6d2b6
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fss_read_print_error_file "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_fss_end_early.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_fss_end_early.3
new file mode 100644 (file)
index 0000000..81b9045
--- /dev/null
@@ -0,0 +1,94 @@
+.TH fss_read_print_error_fss_end_early "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_fss_end_early \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_fss_end_early\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error regarding that the data is not in a correct or valid format.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_fss_read.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_fss_read.3
new file mode 100644 (file)
index 0000000..263c986
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fss_read_print_error_fss_read "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_fss_read \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_fss_read\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print FSS read error messages, handling known errors.
+.PP
+This is intended to be called to handle errors from the various FSS read functions, such as fll_fss_basic_read().
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfll_fss_basic_read()\fP, \fIfss_read_main_t\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_one_content_only.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_one_content_only.3
new file mode 100644 (file)
index 0000000..ec5c5e0
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_read_print_error_one_content_only "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_one_content_only \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_one_content_only\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an message about a multiple Content being unsupported for a particular standard.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_requires_message.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_requires_message.3
new file mode 100644 (file)
index 0000000..ad8e61d
--- /dev/null
@@ -0,0 +1,154 @@
+.TH fss_read_print_error_parameter_requires_message "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_parameter_requires_message \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_parameter_requires_message\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsymbol\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fImessage\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about the parameter requires something that is explained by the message parameter.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B message
+The message to print regarding why the message should be displayed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_value_before_value_number.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_value_before_value_number.3
new file mode 100644 (file)
index 0000000..20d8eb1
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fss_read_print_error_parameter_value_before_value_number "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_parameter_value_before_value_number \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_parameter_value_before_value_number\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fIsymbol\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBconst f_number_unsigned_t \fP\fIvalue\fP,
+    \fBconst f_number_unsigned_t \fP\fIbefore\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about the parameter not allowing a value before another value.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The parameter value that cannot be specified before the "before" function parameter.
+
+.TP
+.B before
+The parameter value that is before the "value" function parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_value_once_only_number.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_parameter_value_once_only_number.3
new file mode 100644 (file)
index 0000000..9bfc0ec
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fss_read_print_error_parameter_value_once_only_number "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_parameter_value_once_only_number \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_parameter_value_once_only_number\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fIsymbol\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBconst f_number_unsigned_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about the parameter only allowing the given value to be specified one time.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B symbol
+The symbol string prepended to the first parameter. This is usually f_console_symbol_long_normal_s.
+
+.TP
+.B name
+The parameter name.
+
+.TP
+.B value
+The parameter value that is already specified.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_unsupported_eol.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_error_unsupported_eol.3
new file mode 100644 (file)
index 0000000..7aea1e1
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_print_error_unsupported_eol "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_error_unsupported_eol \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_read_print_error_unsupported_eol\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about a parameter New Line character '
+.PP
+' (U+000A) being unsupported.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_read_print_error\fP(3), \fIfss_read_print_error_file\fP(3), \fIfss_read_print_error_fss_end_early\fP(3), \fIfss_read_print_error_fss_read\fP(3), \fIfss_read_print_error_one_content_only\fP(3), \fIfss_read_print_error_parameter_requires_message\fP(3), \fIfss_read_print_error_parameter_value_before_value_number\fP(3), \fIfss_read_print_error_parameter_value_once_only_number\fP(3), \fIfss_read_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help.3
new file mode 100644 (file)
index 0000000..18e7071
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_print_message_help "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fss_read_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_read_print_message_help\fP(3), \fIfss_read_print_message_help_note\fP(3), \fIfss_read_print_message_help_note_header\fP(3), \fIfss_read_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_note.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_note.3
new file mode 100644 (file)
index 0000000..d7e7967
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_read_print_message_help_note "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_message_help_note \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid fss_read_print_message_help_note\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fInew_line\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding notes.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B new_line
+If 0x0 (F_false), then print help regarding space separating Object and Content. If 0x1 (F_true), then print help regarding new line separating Object and Content. If 0x2, then print both separation types (intended for use by the general fss_read program).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_read_print_message_help\fP(3), \fIfss_read_print_message_help_note\fP(3), \fIfss_read_print_message_help_note_header\fP(3), \fIfss_read_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_note_header.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_note_header.3
new file mode 100644 (file)
index 0000000..f2524c8
--- /dev/null
@@ -0,0 +1,121 @@
+.TH fss_read_print_message_help_note_header "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_message_help_note_header \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid fss_read_print_message_help_note_header\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fInumber\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding the notes header.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B number
+The FSS standard number, such as "0000".
+
+.TP
+.B name
+The FSS standard name, such as "Basic".
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_read_print_message_help\fP(3), \fIfss_read_print_message_help_note\fP(3), \fIfss_read_print_message_help_note_header\fP(3), \fIfss_read_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_pipe.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_message_help_pipe.3
new file mode 100644 (file)
index 0000000..d2d1704
--- /dev/null
@@ -0,0 +1,63 @@
+.TH fss_read_print_message_help_pipe "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_message_help_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid fss_read_print_message_help_pipe\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding pipe usage.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_read_print_message_help\fP(3), \fIfss_read_print_message_help_note\fP(3), \fIfss_read_print_message_help_note_header\fP(3), \fIfss_read_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_number.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_number.3
new file mode 100644 (file)
index 0000000..5e82dda
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fss_read_print_number "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_number \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_number\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the number and a newline.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B number
+The number to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_object.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_object.3
new file mode 100644 (file)
index 0000000..50541aa
--- /dev/null
@@ -0,0 +1,99 @@
+.TH fss_read_print_object "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_object \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_object\fP(
+    \fBfl_print_t *const          \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t  \fP\fIat\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the Object at the given Object index position.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+Different standards may want to call this before they perform their final printing.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B at
+The Object index to be printed.
+
+.TP
+.B delimits
+The delimits array representing a delimited Object. This represents the positions within the current Object at the "at" position.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_object_end_content.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_object_end_content.3
new file mode 100644 (file)
index 0000000..4f6d4d6
--- /dev/null
@@ -0,0 +1,129 @@
+.TH fss_read_print_object_end_content "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_object_end_content \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_object_end_content\fP(
+    \fBfl_print_t *const          \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t  \fP\fIat\fP,
+    \fBconst f_range_t            \fP\fIrange\fP,
+    \fBconst uint8_t              \fP\fIquote\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content) and the Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+This processes single Content range. This does not print a new line after the Content.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B at
+The Object index position to be processed.
+
+.TP
+.B range
+The range within the buffer representing the Content to print.
+
+.TP
+.B quote
+The quote type representing the character to use (from the f_fss_quote_type_*_e).
+
+.TP
+.B delimits
+The delimits array representing a delimited Content.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_object_end_empty.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_object_end_empty.3
new file mode 100644 (file)
index 0000000..227f553
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_read_print_object_end_empty "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_object_end_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_object_end_empty\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object (which is often the start of Content) and the end of the Content when no Content.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_quote.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_quote.3
new file mode 100644 (file)
index 0000000..47eff36
--- /dev/null
@@ -0,0 +1,70 @@
+.TH fss_read_print_quote "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_quote \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_quote\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the Object at the given Object index position.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B type
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_set_end.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_set_end.3
new file mode 100644 (file)
index 0000000..e4636c6
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fss_read_print_set_end "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_set_end \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_set_end\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIclose\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object/Content set.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B close
+The position within the close array representing the range within the buffer for the close string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_print_set_end_no_eol.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_print_set_end_no_eol.3
new file mode 100644 (file)
index 0000000..89f920f
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fss_read_print_set_end_no_eol "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_print_set_end_no_eol \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t fss_read_print_set_end_no_eol\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIclose\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the end of an Object/Content set.
+.PP
+This is a variation of fss_read_print_set_end() that does not print the EOL.
+.PP
+This locks, uses, and unlocks the file stream.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B close
+The position within the close array representing the range within the buffer for the close string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIfss_read_print_at\fP(3), \fIfss_read_print_content\fP(3), \fIfss_read_print_content_empty\fP(3), \fIfss_read_print_content_ignore\fP(3), \fIfss_read_print_number\fP(3), \fIfss_read_print_object\fP(3), \fIfss_read_print_object_end_content\fP(3), \fIfss_read_print_object_end_empty\fP(3), \fIfss_read_print_quote\fP(3), \fIfss_read_print_set_end\fP(3), \fIfss_read_print_set_end_no_eol\fP(3), \fIfss_read_print_set_end()\fP, \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process.3
new file mode 100644 (file)
index 0000000..afd167a
--- /dev/null
@@ -0,0 +1,39 @@
+.TH fss_read_process "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process normally, reading from the input for the assigned FSS format.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: main.call.process_at(). Errors (with error bit) from: main.call.process_at_line(). Errors (with error bit) from: main.call.process_columns(). Errors (with error bit) from: main.call.process_load(). Errors (with error bit) from: main.call.process_name(). Errors (with error bit) from: main.call.print_at(). Errors (with error bit) from: main.call.process_read(). Errors (with error bit) from: main.call.process_total().
+.PP
+Errors (with error bit) from: macro_fss_read_signal_check().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_at.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_at.3
new file mode 100644 (file)
index 0000000..90d992e
--- /dev/null
@@ -0,0 +1,95 @@
+.TH fss_read_process_at "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_at \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process_at\fP(
+    \fBfss_read_main_t *const     \fP\fImain\fP,
+    \fBconst uint8_t              \fP\fInames\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits_object\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits_content\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process buffer according to "at" parameter rules.
+.PP
+This handles only a single depth (index 0 of the depth array).
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B names
+An array of booleans representing if the name at a given index is enabled. (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
+
+.TP
+.B delimits_object
+The delimits array representing a delimited Object. This represents the positions within the current Object at the "at" position.
+
+.TP
+.B delimits_content
+The delimits array representing a delimited Content. This represents the positions within the current Content at the "at" position.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_at_line.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_at_line.3
new file mode 100644 (file)
index 0000000..c853bfc
--- /dev/null
@@ -0,0 +1,104 @@
+.TH fss_read_process_at_line "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_at_line \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process_at_line\fP(
+    \fBfss_read_main_t *const     \fP\fImain\fP,
+    \fBconst f_number_unsigned_t  \fP\fIat\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits_object\fP,
+    \fBconst f_number_unsigneds_t \fP\fIdelimits_content\fP,
+    \fBf_number_unsigned_t *const \fP\fIline\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process for the given Object index position for processing and ultimately printing a specific line.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.range.
+.PP
+This alters main.setting.state.status: F_okay on success but line not yet found. F_success on success and line is found and printed.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_assure().
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B at
+The Object index position to be processed.
+
+.TP
+.B delimits_object
+The delimits array representing a delimited Object. This represents the positions within the current Object at the "at" position.
+
+.TP
+.B delimits_content
+The delimits array representing a delimited Content. This represents the positions within the current Content at the "at" position.
+
+.TP
+.B line
+The current line being processed. This will be incremented as necessary.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of array lengths.
+.PP
+The macros are defined in type_array.h or type_array-common.h.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_number_unsigneds_t {
+  f_number_unsigned_t  *\fIarray\fP;
+  f_number_unsigned_t   \fIused\fP;
+  f_number_unsigned_t   \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fIf_string_dynamic_append_assure()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_columns.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_columns.3
new file mode 100644 (file)
index 0000000..553a636
--- /dev/null
@@ -0,0 +1,40 @@
+.TH fss_read_process_columns "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_columns \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process_columns\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t          \fP\fInames\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process buffer according to "columns" parameter rules.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B names
+An array of booleans representing if the name at a given index is enabled. (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_last_line.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_last_line.3
new file mode 100644 (file)
index 0000000..c9f8d72
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_read_process_last_line "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_last_line \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_read.h>
+.sp
+\fBvoid fss_read_process_last_line\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the current buffer, guarantee that a newline exists at the end of the buffer.
+.PP
+Most standards are new line sensitive. When appending files to the buffer, if the file lacks a final new line then this could break the format for files appended thereafter.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_assure().
+.PP
+Errors (with error bit) from: macro_fss_read_signal_check().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_read.h\fP(3), \fIfss_read_delimit_content_is\fP(3), \fIfss_read_delimit_object_is\fP(3), \fIfss_read_file_identify\fP(3), \fIfss_read_main\fP(3), \fIfss_read_process_last_line\fP(3), \fIf_string_dynamic_append_assure()\fP, \fImacro_fss_read_signal_check()\fP, \fIf_string_dynamic_append_assure()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_name.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_name.3
new file mode 100644 (file)
index 0000000..cf083d0
--- /dev/null
@@ -0,0 +1,40 @@
+.TH fss_read_process_name "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_name \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process_name\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP,
+    \fBuint8_t                \fP\fInames\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process buffer according to "name" parameter rules.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B names
+An array of booleans representing if the name at a given index is enabled. (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_total.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_total.3
new file mode 100644 (file)
index 0000000..f67bf26
--- /dev/null
@@ -0,0 +1,42 @@
+.TH fss_read_process_total "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_total \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process_total\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t          \fP\fInames\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process buffer according to "total" parameter rules.
+.PP
+This processes single line Content only.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B names
+An array of booleans representing if the name at a given index is enabled. (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_process_total_multiple.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_process_total_multiple.3
new file mode 100644 (file)
index 0000000..9560f80
--- /dev/null
@@ -0,0 +1,42 @@
+.TH fss_read_process_total_multiple "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_process_total_multiple \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid fss_read_process_total_multiple\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t          \fP\fInames\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process buffer according to "total" parameter rules.
+.PP
+This processes multi-line Content only.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B names
+An array of booleans representing if the name at a given index is enabled. (If TRUE, then the name is to be used and if FALSE, then the name is not to be used.)
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIfss_read_process\fP(3), \fIfss_read_process_at\fP(3), \fIfss_read_process_at_line\fP(3), \fIfss_read_process_columns\fP(3), \fIfss_read_process_name\fP(3), \fIfss_read_process_total\fP(3), \fIfss_read_process_total_multiple\fP(3), \fImacro_fss_read_signal_check()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_setting_delete.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_setting_delete.3
new file mode 100644 (file)
index 0000000..2613282
--- /dev/null
@@ -0,0 +1,89 @@
+.TH fss_read_setting_delete "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_read_setting_delete\fP(
+    \fBfss_read_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The fss read main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+For all function pointers on this structure, the main variable must be of type fss_read_main_t.
+.PP
+feature: Flags not passed to the main function but instead assigned by individual standards to designate how they work. flag: Flags passed to the main function. delimit_mode: The delimit mode. state: The state data used when processing the FSS data.
+.PP
+delimit_depth: The delimit depth. select: The Content to select (column number). line: The Content to select (row number).
+.PP
+range: A range used in conjunction with some buffer during processing.
+.PP
+files: A statically allocated array of files for designating where in the buffer a file is represented. depth: The active depth to use. depths: The array of parameters for each given depth.
+.PP
+standard: A human-friendly string describing the standard in use, such as "FSS-0000 (Basic)". open_object: The Object open character used by the particular standard. buffer: The buffer containing all loaded files (and STDIN pipe).
+.PP
+comments: The positions within the buffer representing comments. contents: The positions within the buffer representing Contents. delimits_object: The positions within the buffer representing Object character delimits. delimits_content: The positions within the buffer representing Content character delimits. nests: The positions within the buffer representing nested Objects and Contents. objects: The positions within the buffer representing Objects. quotes_object: The quotes within the Object structure. quotes_content: The quotes within the Content structure.
+.sp
+.RS
+.nf
+\fB
+struct fss_read_setting_t {
+  uint16_t             \fIfeature\fP;
+  uint32_t             \fIflag\fP;
+  uint8_t              \fIdelimit_mode\fP;
+  f_state_t            \fIstate\fP;
+  f_number_unsigned_t  \fIdelimit_depth\fP;
+  f_number_unsigned_t  \fIselect\fP;
+  f_number_unsigned_t  \fIline\fP;
+  f_range_t            \fIrange\fP;
+  fss_read_files_t     \fIfiles\fP;
+  fss_read_depth_t     \fIdepth\fP;
+  fss_read_depths_t    \fIdepths\fP;
+  f_string_static_t    \fIstandard\fP;
+  f_string_static_t    \fIopen_object\fP;
+  f_string_dynamic_t   \fIbuffer\fP;
+  f_ranges_t           \fIcloses\fP;
+  f_ranges_t           \fIcomments\fP;
+  f_rangess_t          \fIcontents\fP;
+  f_number_unsigneds_t \fIdelimits_object\fP;
+  f_number_unsigneds_t \fIdelimits_content\fP;
+  f_fss_nest_t         \fInest\fP;
+  f_ranges_t           \fIobjects\fP;
+  f_uint8s_t           \fIquotes_object\fP;
+  f_uint8ss_t          \fIquotes_content\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_read_cache_delete\fP(3), \fIfss_read_depth_delete\fP(3), \fIfss_read_depths_resize\fP(3), \fIfss_read_files_resize\fP(3), \fIfss_read_main_delete\fP(3), \fIfss_read_setting_delete\fP(3), \fIf_fss_nest_delete()\fP, \fIf_memory_array_resize()\fP, \fIfss_read_files_resize()\fP, \fIfss_read_depths_resize()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_setting_load.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_setting_load.3
new file mode 100644 (file)
index 0000000..74fc603
--- /dev/null
@@ -0,0 +1,79 @@
+.TH fss_read_setting_load "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fss_read_setting_load\fP(
+    \fBconst f_console_arguments_t         \fP\fIarguments\fP,
+    \fBfss_read_main_t *const              \fP\fImain\fP,
+    \fBconst fss_read_settings_load_call_t \fP\fIdo_settings_load\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This calls main.call.process_last_line() if not NULL.
+.PP
+This alters main.setting.range.
+.PP
+This alters main.setting.state.status: F_okay on success. F_data_not on success but nothing was provided to operate with.
+.PP
+F_interrupt (with error bit) on interrupt signal received. F_parameter (with error bit) on parameter error.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: f_file_stream_open(). Errors (with error bit) from: fll_program_parameter_process_context_standard(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.PP
+Set to NULL to disable.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data.
+
+.TP
+.B do_settings_load
+(optional) Designate a function to call after performing the initial processing, but before printing help. If the function returns F_done, then this function immediately returns, resetting status to F_okay.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfss_read_ensure_quotes_length\fP(3), \fIfss_read_setting_load\fP(3), \fIfss_read_setting_load_depth\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIfss_read_setting_load_depth()\fP, \fImacro_fss_read_signal_check()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIfss_read_setting_load_depth()\fP, \fImacro_fss_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_setting_load_depth.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_setting_load_depth.3
new file mode 100644 (file)
index 0000000..4ea084f
--- /dev/null
@@ -0,0 +1,96 @@
+.TH fss_read_setting_load_depth "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_setting_load_depth \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fss_read_setting_load_depth\fP(
+    \fBconst f_console_arguments_t   \fP\fIarguments\fP,
+    \fBfss_read_main_t *const        \fP\fImain\fP,
+    \fBf_console_parameters_t *const \fP\fIparameters\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the depth and depth related parameters.
+.PP
+Will handle depth-sensitive parameter conflicts, such as name being used with at (which is not allowed).
+.PP
+This should only be called by standards that support this behavior.
+.PP
+This is intended to be called within the scope of a setting load callback in fss_read_setting_load().
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+F_interrupt (with error bit) on interrupt signal received. F_parameter (with error bit) on parameter error.
+.PP
+Errors (with error bit) from: f_rip_dynamic(). Errors (with error bit) from: f_string_dynamic_append(). Errors (with error bit) from: fl_conversion_dynamic_partial_to_unsigned_detect().
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data.
+
+.TP
+.B parameters
+The console parameters structure representing the processed arguments.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameters_t {
+  f_console_parameter_t      *\fIarray\fP;
+  f_string_dynamics_t         \fIarguments\fP;
+  f_number_unsigneds_t        \fIremaining\fP;
+  f_number_unsigned_t         \fIused\fP;
+  f_console_parameters_call_t \fIon_match\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfss_read_ensure_quotes_length\fP(3), \fIfss_read_setting_load\fP(3), \fIfss_read_setting_load_depth\fP(3), \fIfss_read_setting_load()\fP, \fIf_rip_dynamic()\fP, \fIf_string_dynamic_append()\fP, \fIfl_conversion_dynamic_partial_to_unsigned_detect()\fP, \fIfss_read_depths_resize()\fP, \fIf_rip_dynamic()\fP, \fIf_string_dynamic_append()\fP, \fIfl_conversion_dynamic_partial_to_unsigned_detect()\fP, \fIfll_program_print_signal_received()\fP, \fIfss_read_depths_resize()\fP, \fIfss_read_setting_load()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_signal_handler.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_signal_handler.3
new file mode 100644 (file)
index 0000000..5efb861
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_read_signal_handler "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid fss_read_signal_handler\fP(
+    \fBfss_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIfss_read_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_read/data/documentation/man/man3/fss_read_thread_signal.3 b/level_3/fss_read/data/documentation/man/man3/fss_read_thread_signal.3
new file mode 100644 (file)
index 0000000..7fdcce7
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_read_thread_signal "3" "January 2026" "FLL - FSS Read 0.8.0" "Program Functions"
+.SH "NAME"
+fss_read_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * fss_read_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must not be NULL. Must be of type fss_read_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIfss_read_thread_signal\fP(3), \fIfss_read_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIfss_read_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index e02c500960a898cbc484ce4d09ecd0a02ef7788f..3d4d3b9004c85dc3d66a7a1806547938edaadbd5 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_BASIC_LIST_WRITE "1" "November 2025" "FLL - FSS Basic List Write 0.8.0" "User Commands"
+.TH FSS_BASIC_LIST_WRITE "1" "January 2026" "FLL - FSS Basic List Write 0.8.0" "User Commands"
 .SH NAME
 fss_basic_list_write \- Write data in \fBFSS-0001 (Basic List)\fR format.
 .SH SYNOPSIS
index 6241a1de61778443618dd6f5b46982f0d6959600..7a1207384f7c0c2bbc0d435feef79e72f668ac23 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_BASIC_WRITE "1" "November 2025" "FLL - FSS Basic Write 0.8.0" "User Commands"
+.TH FSS_BASIC_WRITE "1" "January 2026" "FLL - FSS Basic Write 0.8.0" "User Commands"
 .SH NAME
 fss_basic_write \- Write data in \fBFSS-0000 (Basic)\fR format.
 .SH SYNOPSIS
index 4f21a805a2ad098273217fb6087c2329761dd684..5ab5a6ba527486d6340ce211e75f06c3b37269d3 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_EMBEDDED_LIST_WRITE "1" "November 2025" "FLL - FSS Embedded List Write 0.8.0" "User Commands"
+.TH FSS_EMBEDDED_LIST_WRITE "1" "January 2026" "FLL - FSS Embedded List Write 0.8.0" "User Commands"
 .SH NAME
 fss_embedded_list_write \- Write data in \fBFSS-0008 (Embedded List)\fR format.
 .SH SYNOPSIS
index 415132fb61f061e27019c422aaafb499f197bd5b..b7602c5703958342ade3cef6c478c0e5c4ef9201 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_EXTENDED_LIST_WRITE "1" "November 2025" "FLL - FSS Extended List Write 0.8.0" "User Commands"
+.TH FSS_EXTENDED_LIST_WRITE "1" "January 2026" "FLL - FSS Extended List Write 0.8.0" "User Commands"
 .SH NAME
 fss_extended_list_write \- Write data in \fBFSS-0003 (Extended List)\fR format.
 .SH SYNOPSIS
index fafc7969167487f761d1bf6fee68e3a8cf0c851a..df473bdb50cd0f6dec29431d9afe768e1b4da8b3 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_EXTENDED_WRITE "1" "November 2025" "FLL - FSS Extended Write 0.8.0" "User Commands"
+.TH FSS_EXTENDED_WRITE "1" "January 2026" "FLL - FSS Extended Write 0.8.0" "User Commands"
 .SH NAME
 fss_extended_write \- Write data in \fBFSS-0001 (Extended)\fR format.
 .SH SYNOPSIS
index a1406a2773d1716c0ad436c727aa1a2def581148..cfe59bdfd67e31d562d74ff18d0c97ef688fe378 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_PAYLOAD_WRITE "1" "November 2025" "FLL - FSS Payload Write 0.8.0" "User Commands"
+.TH FSS_PAYLOAD_WRITE "1" "January 2026" "FLL - FSS Payload Write 0.8.0" "User Commands"
 .SH NAME
 fss_payload_write \- Write data in \fBFSS-000E (Payload)\fR format.
 .SH SYNOPSIS
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_print_help.3
new file mode 100644 (file)
index 0000000..f93fcbc
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_write_basic_list_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_list_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_basic_list_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_basic_list_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_content.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_content.3
new file mode 100644 (file)
index 0000000..fb9f28f
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_basic_list_process_content "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_list_process_content \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_basic_list_process_content\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t           \fP\fIlast\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Content, printing the FSS-0002 (Basic List) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B last
+If TRUE, then this is the last Content in the Content set. If FALSE, then this is not the last Content in the Content set.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_basic_list_process_content\fP(3), \fIfss_write_basic_list_process_help\fP(3), \fIfss_write_basic_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_help.3
new file mode 100644 (file)
index 0000000..9dfccfd
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_basic_list_process_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_list_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_basic_list_process_help\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0002 (Basic List).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_basic_list_process_content\fP(3), \fIfss_write_basic_list_process_help\fP(3), \fIfss_write_basic_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_object.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_list_process_object.3
new file mode 100644 (file)
index 0000000..2bc497d
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_write_basic_list_process_object "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_list_process_object \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_basic_list_process_object\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Object, printing the FSS-0002 (Basic List) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status. This uses and alters main.setting.buffer.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_basic_list_process_content\fP(3), \fIfss_write_basic_list_process_help\fP(3), \fIfss_write_basic_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_print_help.3
new file mode 100644 (file)
index 0000000..d764948
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_write_basic_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_basic_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_basic_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_content.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_content.3
new file mode 100644 (file)
index 0000000..f6f7a63
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_basic_process_content "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_process_content \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_basic_process_content\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t           \fP\fIlast\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Content, printing the FSS-0000 (Basic) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B last
+If TRUE, then this is the last Content in the Content set. If FALSE, then this is not the last Content in the Content set.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_basic_process_content\fP(3), \fIfss_write_basic_process_help\fP(3), \fIfss_write_basic_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_help.3
new file mode 100644 (file)
index 0000000..b74de86
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_basic_process_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_basic_process_help\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0000 (Basic).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_basic_process_content\fP(3), \fIfss_write_basic_process_help\fP(3), \fIfss_write_basic_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_object.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_basic_process_object.3
new file mode 100644 (file)
index 0000000..f7730c5
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_write_basic_process_object "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_basic_process_object \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_basic_process_object\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Object, printing the FSS-0000 (Basic) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status. This uses and alters main.setting.buffer.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_basic_process_content\fP(3), \fIfss_write_basic_process_help\fP(3), \fIfss_write_basic_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_print_help.3
new file mode 100644 (file)
index 0000000..66cc2d5
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_write_embedded_list_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_embedded_list_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_embedded_list_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_embedded_list_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_content.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_content.3
new file mode 100644 (file)
index 0000000..69a0fa7
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_embedded_list_process_content "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_embedded_list_process_content \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_embedded_list_process_content\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t           \fP\fIlast\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Content, printing the FSS-0008 (Embedded List) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B last
+If TRUE, then this is the last Content in the Content set. If FALSE, then this is not the last Content in the Content set.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_embedded_list_process_content\fP(3), \fIfss_write_embedded_list_process_help\fP(3), \fIfss_write_embedded_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_help.3
new file mode 100644 (file)
index 0000000..139b3eb
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_embedded_list_process_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_embedded_list_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_embedded_list_process_help\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0008 (Embedded List).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_embedded_list_process_content\fP(3), \fIfss_write_embedded_list_process_help\fP(3), \fIfss_write_embedded_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_object.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_embedded_list_process_object.3
new file mode 100644 (file)
index 0000000..68bb113
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_write_embedded_list_process_object "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_embedded_list_process_object \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_embedded_list_process_object\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Object, printing the FSS-0008 (Embedded List) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status. This uses and alters main.setting.buffer.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_embedded_list_process_content\fP(3), \fIfss_write_embedded_list_process_help\fP(3), \fIfss_write_embedded_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_print_help.3
new file mode 100644 (file)
index 0000000..4c50e52
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_write_extended_list_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_list_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_extended_list_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_extended_list_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_content.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_content.3
new file mode 100644 (file)
index 0000000..439935a
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_write_extended_list_process_content "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_list_process_content \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_extended_list_process_content\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t           \fP\fIlast\fP
+);
+.fi
+.SH DESCRIPTION
+Process a single Content, printing the FSS-0003 (Extended List) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B last
+If TRUE, then this is the last Content in the Content set. If FALSE, then this is not the last Content in the Content set.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_extended_list_process_content\fP(3), \fIfss_write_extended_list_process_help\fP(3), \fIfss_write_extended_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_help.3
new file mode 100644 (file)
index 0000000..9c3d8e6
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_extended_list_process_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_list_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_extended_list_process_help\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0003 (Extended List).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_extended_list_process_content\fP(3), \fIfss_write_extended_list_process_help\fP(3), \fIfss_write_extended_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_object.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_list_process_object.3
new file mode 100644 (file)
index 0000000..c15e4b9
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_write_extended_list_process_object "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_list_process_object \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_extended_list_process_object\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Object, printing the FSS-0003 (Extended List) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status. This uses and alters main.setting.buffer.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_extended_list_process_content\fP(3), \fIfss_write_extended_list_process_help\fP(3), \fIfss_write_extended_list_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_print_help.3
new file mode 100644 (file)
index 0000000..367cd7a
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_write_extended_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_extended_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_extended_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_content.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_content.3
new file mode 100644 (file)
index 0000000..3fc8825
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_extended_process_content "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_process_content \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_extended_process_content\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP,
+    \fBconst uint8_t           \fP\fIlast\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Content, printing the FSS-0001 (Extended) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B last
+If TRUE, then this is the last Content in the Content set. If FALSE, then this is not the last Content in the Content set.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_extended_process_content\fP(3), \fIfss_write_extended_process_help\fP(3), \fIfss_write_extended_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_help.3
new file mode 100644 (file)
index 0000000..ba4d482
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_extended_process_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_extended_process_help\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-0001 (Extended).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_extended_process_content\fP(3), \fIfss_write_extended_process_help\fP(3), \fIfss_write_extended_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_object.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_extended_process_object.3
new file mode 100644 (file)
index 0000000..4ff2d2d
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_write_extended_process_object "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_extended_process_object \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_extended_process_object\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a single Object, printing the FSS-0001 (Extended) if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status. This uses and alters main.setting.buffer.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_extended_process_content\fP(3), \fIfss_write_extended_process_help\fP(3), \fIfss_write_extended_process_object\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_main.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_main.3
new file mode 100644 (file)
index 0000000..a6ba50d
--- /dev/null
@@ -0,0 +1,39 @@
+.TH fss_write_main "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_main \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_main\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.custom.setting.state.status: F_okay on success. F_true on success when performing verification and verify passed. F_false on success when performing verification and verify failed. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_main\fP(3), \fIfss_write_process_normal\fP(3), \fIfss_write_process_normal_data\fP(3), \fIfss_write_process_pipe\fP(3), \fIfss_write_process_set\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_main_delete.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_main_delete.3
new file mode 100644 (file)
index 0000000..4e3f71f
--- /dev/null
@@ -0,0 +1,35 @@
+.TH fss_write_main_delete "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_write_main_delete\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_write_main_delete\fP(3), \fIfss_write_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIfss_write_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_main_print_error_format_unknown.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_main_print_error_format_unknown.3
new file mode 100644 (file)
index 0000000..f47ea4a
--- /dev/null
@@ -0,0 +1,92 @@
+.TH fss_write_main_print_error_format_unknown "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_main_print_error_format_unknown \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_main_print_error_format_unknown\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B value
+A string representing the value that is of an unknown format.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_main_print_error_format_unknown\fP(3), \fIfss_write_main_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_main_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_main_print_help.3
new file mode 100644 (file)
index 0000000..cb69983
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_write_main_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_main_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_main_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for "main" fss_write.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_main_print_error_format_unknown\fP(3), \fIfss_write_main_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_payload_print_error_payload_not_last.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_payload_print_error_payload_not_last.3
new file mode 100644 (file)
index 0000000..f2d6eb1
--- /dev/null
@@ -0,0 +1,64 @@
+.TH fss_write_payload_print_error_payload_not_last "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_payload_print_error_payload_not_last \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_payload_print_error_payload_not_last\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_payload_print_error_payload_not_last\fP(3), \fIfss_write_payload_print_help\fP(3), \fIfss_read_main_t\fP, \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_payload_print_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_payload_print_help.3
new file mode 100644 (file)
index 0000000..a855cce
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_write_payload_print_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_payload_print_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t fss_write_payload_print_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for FSS-000E (Payload).
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIfss_write_payload_print_error_payload_not_last\fP(3), \fIfss_write_payload_print_help\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_help.3
new file mode 100644 (file)
index 0000000..744d14c
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_payload_process_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_payload_process_help \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_payload_process_help\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process help for FSS-000E (Payload).
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_payload_process_help\fP(3), \fIfss_write_payload_process_pipe\fP(3), \fIfss_write_payload_process_set\fP(3), \fIfss_write_payload_setting_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_pipe.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_pipe.3
new file mode 100644 (file)
index 0000000..beb20ef
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_write_payload_process_pipe "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_payload_process_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_payload_process_pipe\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the pipe, reading from the pipe and writing to the output.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success. F_data_not on success but pipe contained no relevant data. F_payload on success and the payload has been printed. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_payload_process_help\fP(3), \fIfss_write_payload_process_pipe\fP(3), \fIfss_write_payload_process_set\fP(3), \fIfss_write_payload_setting_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_set.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_payload_process_set.3
new file mode 100644 (file)
index 0000000..1a4b011
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_write_payload_process_set "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_payload_process_set \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_payload_process_set\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given object and content, printing the FSS if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_payload_process_help\fP(3), \fIfss_write_payload_process_pipe\fP(3), \fIfss_write_payload_process_set\fP(3), \fIfss_write_payload_setting_load\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_payload_setting_load.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_payload_setting_load.3
new file mode 100644 (file)
index 0000000..f721b7f
--- /dev/null
@@ -0,0 +1,72 @@
+.TH fss_write_payload_setting_load "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_payload_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_payload_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBfss_write_main_t *const     \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the payload-specific program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+Must not be NULL.
+.PP
+This alters setting.process_help, setting.process_normal, and setting.process_pipe.
+.PP
+This alters setting.state.status: F_okay on success. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL. F_parameter (with error bit) on parameter error.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success but nothing was provided to operate with.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_payload_process_help\fP(3), \fIfss_write_payload_process_pipe\fP(3), \fIfss_write_payload_process_set\fP(3), \fIfss_write_payload_setting_load\fP(3), \fIfss_write_setting_load()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_error.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_error.3
new file mode 100644 (file)
index 0000000..7f8eec2
--- /dev/null
@@ -0,0 +1,71 @@
+.TH fss_write_print_error "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_write_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_write_print_error\fP(3), \fIfss_write_print_error_file\fP(3), \fIfss_write_print_error_one_content_only\fP(3), \fIfss_write_print_error_parameter_same_times_at_least\fP(3), \fIfss_write_print_error_prepend_only_whitespace\fP(3), \fIfss_write_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_file.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_file.3
new file mode 100644 (file)
index 0000000..0fb4f71
--- /dev/null
@@ -0,0 +1,134 @@
+.TH fss_write_print_error_file "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_write_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_write_print_error\fP(3), \fIfss_write_print_error_file\fP(3), \fIfss_write_print_error_one_content_only\fP(3), \fIfss_write_print_error_parameter_same_times_at_least\fP(3), \fIfss_write_print_error_prepend_only_whitespace\fP(3), \fIfss_write_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP, \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_one_content_only.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_one_content_only.3
new file mode 100644 (file)
index 0000000..fb81da9
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_write_print_error_one_content_only "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_error_one_content_only \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_write_print_error_one_content_only\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an message about a multiple Content being unsupported for a particular standard.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_write_print_error\fP(3), \fIfss_write_print_error_file\fP(3), \fIfss_write_print_error_one_content_only\fP(3), \fIfss_write_print_error_parameter_same_times_at_least\fP(3), \fIfss_write_print_error_prepend_only_whitespace\fP(3), \fIfss_write_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_parameter_same_times_at_least.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_parameter_same_times_at_least.3
new file mode 100644 (file)
index 0000000..f5724f5
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_write_print_error_parameter_same_times_at_least "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_error_parameter_same_times_at_least \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_write_print_error_parameter_same_times_at_least\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about the object and content parameters not being specified at least the same number of times when partial is not requested.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_write_print_error\fP(3), \fIfss_write_print_error_file\fP(3), \fIfss_write_print_error_one_content_only\fP(3), \fIfss_write_print_error_parameter_same_times_at_least\fP(3), \fIfss_write_print_error_prepend_only_whitespace\fP(3), \fIfss_write_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP, \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_prepend_only_whitespace.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_prepend_only_whitespace.3
new file mode 100644 (file)
index 0000000..7e039e0
--- /dev/null
@@ -0,0 +1,66 @@
+.TH fss_write_print_error_prepend_only_whitespace "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_error_prepend_only_whitespace \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_write_print_error_prepend_only_whitespace\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error when prepend parameter has something other than white space.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_write_print_error\fP(3), \fIfss_write_print_error_file\fP(3), \fIfss_write_print_error_one_content_only\fP(3), \fIfss_write_print_error_parameter_same_times_at_least\fP(3), \fIfss_write_print_error_prepend_only_whitespace\fP(3), \fIfss_write_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_unsupported_eol.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_error_unsupported_eol.3
new file mode 100644 (file)
index 0000000..c4ec7ee
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_write_print_error_unsupported_eol "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_error_unsupported_eol \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t fss_write_print_error_unsupported_eol\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message about a parameter New Line character '
+.PP
+' (U+000A) being unsupported.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIfss_write_print_error\fP(3), \fIfss_write_print_error_file\fP(3), \fIfss_write_print_error_one_content_only\fP(3), \fIfss_write_print_error_parameter_same_times_at_least\fP(3), \fIfss_write_print_error_prepend_only_whitespace\fP(3), \fIfss_write_print_error_unsupported_eol\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help.3
new file mode 100644 (file)
index 0000000..09c8135
--- /dev/null
@@ -0,0 +1,68 @@
+.TH fss_write_print_message_help "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t fss_write_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_write_print_message_help\fP(3), \fIfss_write_print_message_help_end_next\fP(3), \fIfss_write_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help_end_next.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help_end_next.3
new file mode 100644 (file)
index 0000000..1cca76e
--- /dev/null
@@ -0,0 +1,63 @@
+.TH fss_write_print_message_help_end_next "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_message_help_end_next \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid fss_write_print_message_help_end_next\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding Object End, Content Next, and Content End usage.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_write_print_message_help\fP(3), \fIfss_write_print_message_help_end_next\fP(3), \fIfss_write_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help_pipe.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_print_message_help_pipe.3
new file mode 100644 (file)
index 0000000..57e29ad
--- /dev/null
@@ -0,0 +1,63 @@
+.TH fss_write_print_message_help_pipe "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_print_message_help_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid fss_write_print_message_help_pipe\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding pipe usage.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type fss_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIfss_write_print_message_help\fP(3), \fIfss_write_print_message_help_end_next\fP(3), \fIfss_write_print_message_help_pipe\fP(3), \fIfss_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_process_normal.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_process_normal.3
new file mode 100644 (file)
index 0000000..d6e4f41
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_write_process_normal "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_process_normal \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_process_normal\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process normally, writing to the output for the assigned FSS format.
+.PP
+Must not be NULL.
+.PP
+This alters main.custom.setting.state.status: status from fss_write_process_normal_data().
+.PP
+Errors (with error bit) from: fss_write_process_normal_data().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_main\fP(3), \fIfss_write_process_normal\fP(3), \fIfss_write_process_normal_data\fP(3), \fIfss_write_process_pipe\fP(3), \fIfss_write_process_set\fP(3), \fIfss_write_process_normal_data()\fP, \fIfss_write_process_normal_data()\fP, \fIfss_write_process_normal_data()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_process_normal_data.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_process_normal_data.3
new file mode 100644 (file)
index 0000000..e24ca9b
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_write_process_normal_data "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_process_normal_data \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_process_normal_data\fP(
+    \fBfss_write_main_t *const   \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIlength\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the data normally, writing to the output for the assigned FSS format.
+.PP
+Must not be NULL.
+.PP
+This alters main.custom.setting.state.status: F_okay on success. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B length
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_main\fP(3), \fIfss_write_process_normal\fP(3), \fIfss_write_process_normal_data\fP(3), \fIfss_write_process_pipe\fP(3), \fIfss_write_process_set\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_process_pipe.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_process_pipe.3
new file mode 100644 (file)
index 0000000..37a29d4
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_write_process_pipe "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_process_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_process_pipe\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the pipe, reading from the pipe and writing to the output for the assigned FSS format.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success. F_data_not on success but pipe contained no relevant data. F_basic on success and the basic has been printed. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_main\fP(3), \fIfss_write_process_normal\fP(3), \fIfss_write_process_normal_data\fP(3), \fIfss_write_process_pipe\fP(3), \fIfss_write_process_set\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_process_set.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_process_set.3
new file mode 100644 (file)
index 0000000..a706b9e
--- /dev/null
@@ -0,0 +1,37 @@
+.TH fss_write_process_set "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_process_set \-
+.SH SYNOPSIS
+.nf
+.B #include <fss_write.h>
+.sp
+\fBvoid fss_write_process_set\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given Object and Content, printing the assigned FSS format if valid or an error if invalid.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIfss_write.h\fP(3), \fIfss_write_main\fP(3), \fIfss_write_process_normal\fP(3), \fIfss_write_process_normal_data\fP(3), \fIfss_write_process_pipe\fP(3), \fIfss_write_process_set\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_setting_delete.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_setting_delete.3
new file mode 100644 (file)
index 0000000..950fe70
--- /dev/null
@@ -0,0 +1,81 @@
+.TH fss_write_setting_delete "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid fss_write_setting_delete\fP(
+    \fBfss_write_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The fss write main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+For all function pointers on this structure, the main variable must be of type fss_write_main_t.
+.PP
+flag: Flags passed to the main function. state: The state data used when processing the FSS data.
+.PP
+range: A range used in conjunction with some buffer during processing.
+.PP
+quote: This holds the quote used during processing. standard: A human-friendly string describing the standard in use, such as "FSS-0000 (Basic)".
+.PP
+escaped: A buffer used for escaping strings during processing. block: A buffer used to storing one or more blocks while processing a file line by line. buffer: A buffer used during processing the file. prepend: A string to prepend to each multi-line Content.
+.PP
+ignoress: An array of range sets passed as values to the "--ignore" parameter or via the input pipe. objects: An array of objects passed as values to the "--object" parameter or via the input pipe. contentss: An array of content sets passed as values to the "--content" parameter or via the input pipe.
+.PP
+ignores: A pointer to a specific Ignores used during processing. object: A pointer to a specific Object used during processing. content: A pointer to a specific Content used during processing. contents: A pointer to a specific set of Content used during processing.
+.sp
+.RS
+.nf
+\fB
+struct fss_write_setting_t {
+  uint32_t             \fIflag\fP;
+  f_state_t            \fIstate\fP;
+  f_range_t            \fIrange\fP;
+  f_string_static_t    \fIquote\fP;
+  f_string_static_t    \fIstandard\fP;
+  f_string_dynamic_t   \fIblock\fP;
+  f_string_dynamic_t   \fIbuffer\fP;
+  f_string_dynamic_t   \fIprepend\fP;
+  f_rangess_t          \fIignoress\fP;
+  f_string_dynamics_t  \fIobjects\fP;
+  f_string_dynamicss_t \fIcontentss\fP;
+  f_ranges_t          *\fIignores\fP;
+  f_string_static_t   *\fIobject\fP;
+  f_string_static_t   *\fIcontent\fP;
+  f_string_statics_t  *\fIcontents\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIfss_write_main_delete\fP(3), \fIfss_write_setting_delete\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_setting_load.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_setting_load.3
new file mode 100644 (file)
index 0000000..2fc29dc
--- /dev/null
@@ -0,0 +1,73 @@
+.TH fss_write_setting_load "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid fss_write_setting_load\fP(
+    \fBconst f_console_arguments_t         \fP\fIarguments\fP,
+    \fBfss_write_main_t *const             \fP\fImain\fP,
+    \fBconst fss_write_setting_load_call_t \fP\fIload_call\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success but nothing was provided to operate with.
+.PP
+F_parameter (with error bit) on parameter error.
+.PP
+Set to NULL to disable.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data.
+
+.TP
+.B load_call
+(optional) Designate a function to call after performing the initial processing, but before printing help. If the function returns F_done, then this function immediately returns, resetting status to F_okay.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIfss_write_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_signal_handler.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_signal_handler.3
new file mode 100644 (file)
index 0000000..7808d2c
--- /dev/null
@@ -0,0 +1,41 @@
+.TH fss_write_signal_handler "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid fss_write_signal_handler\fP(
+    \fBfss_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIfss_write_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/fss_write/data/documentation/man/man3/fss_write_thread_signal.3 b/level_3/fss_write/data/documentation/man/man3/fss_write_thread_signal.3
new file mode 100644 (file)
index 0000000..9fcc3e6
--- /dev/null
@@ -0,0 +1,38 @@
+.TH fss_write_thread_signal "3" "January 2026" "FLL - FSS Write 0.8.0" "Program Functions"
+.SH "NAME"
+fss_write_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * fss_write_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type fss_write_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIfss_write_thread_signal\fP(3), \fIfss_write_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIfss_write_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 6c8c767f88a4f6de5ecb1c5da0d7a45184a81d3e..34b344e5a7a0867bfa49d4e4faeb7fa2eab6ec36 100644 (file)
@@ -1,4 +1,4 @@
-.TH IKI_READ "1" "November 2025" "FLL - IKI Read 0.8.0" "User Commands"
+.TH IKI_READ "1" "January 2026" "FLL - IKI Read 0.8.0" "User Commands"
 .SH NAME
 iki_read \- Read text, processing IKI variables.
 .SH SYNOPSIS
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_cache_delete.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_cache_delete.3
new file mode 100644 (file)
index 0000000..6d0e4c8
--- /dev/null
@@ -0,0 +1,54 @@
+.TH iki_read_cache_delete "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_cache_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid iki_read_cache_delete\fP(
+    \fBiki_read_cache_t *const \fP\fIcache\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program cache data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B cache
+The program cache data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The IKI read main program cache.
+.PP
+expand: A buffer used in certain cases for the expanded output that is to be printed.
+.sp
+.RS
+.nf
+\fB
+struct iki_read_cache_t {
+  f_string_dynamic_t \fIbuffer\fP;
+  f_string_dynamic_t \fIexpand\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIiki_read_cache_delete\fP(3), \fIiki_read_main_delete\fP(3), \fIiki_read_setting_delete\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_delete_data.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_delete_data.3
new file mode 100644 (file)
index 0000000..ddfdfca
--- /dev/null
@@ -0,0 +1,35 @@
+.TH iki_read_eki_delete_data "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_delete_data \-
+.SH SYNOPSIS
+.nf
+.B #include <eki_read.h>
+.sp
+\fBvoid iki_read_eki_delete_data\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIeki_read.h\fP(3), \fIiki_read_eki_delete_data\fP(3), \fIf_iki_data_delete()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_identify_alteration.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_identify_alteration.3
new file mode 100644 (file)
index 0000000..535e918
--- /dev/null
@@ -0,0 +1,36 @@
+.TH iki_read_eki_identify_alteration "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_identify_alteration \-
+.SH SYNOPSIS
+.nf
+.B #include <identify.h>
+.sp
+\fBvoid iki_read_eki_identify_alteration\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the arguments, associating replacements and wraps with a given vocabulary.
+.PP
+This does not handle substitutions because substitutions must match both name and value (Object and Content). This function does not know the value (Content).
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+The matching setting->data.vocabulary index or if no match then setting->data.vocabulary.used.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIidentify.h\fP(3), \fIiki_read_eki_identify_alteration\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_print_data.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_print_data.3
new file mode 100644 (file)
index 0000000..db57e45
--- /dev/null
@@ -0,0 +1,68 @@
+.TH iki_read_eki_print_data "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_print_data \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBvoid iki_read_eki_print_data\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the given range at the given index for EKI read.
+.PP
+This expects the caller to have the output locked appropriately.
+.PP
+This detects and prints any applicable substitution matching the vocabulary at the given index. If there is no substitution, then this prints the given range at the given index.
+.PP
+The setting.map_wrapss is expected to be defined as a valid pointer to an array. The setting.map_replacess is expected to be defined as a valid pointer to an array.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index used to identify the desired range in variable, content, and ranges.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_read_eki_print_data\fP(3), \fIiki_read_eki_print_message_help\fP(3), \fIf_print_dynamic()\fP, \fIf_print_dynamic_partial()\fP, \fIiki_read_identify_substitution()\fP, \fIiki_read_print_data_wrap_append()\fP, \fIiki_read_print_data_wrap_prepend()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_print_message_help.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_print_message_help.3
new file mode 100644 (file)
index 0000000..49de1c2
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_read_eki_print_message_help "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_read_eki_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for EKI read.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_read_eki_print_data\fP(3), \fIiki_read_eki_print_message_help\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_at.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_at.3
new file mode 100644 (file)
index 0000000..cd97cc3
--- /dev/null
@@ -0,0 +1,48 @@
+.TH iki_read_eki_process_buffer_at "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_process_buffer_at \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_eki_process_buffer_at\fP(
+    \fBiki_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the given range at the given index for EKI read.
+.PP
+This expands all of the appropriate Variables so that post-expansion calculations may be performed. This is particularly useful for preparing to print a single Line in Content and Literal modes.
+.PP
+Must not be NULL.
+.PP
+The setting.map_wrapss is expected to be defined as a valid pointer to an array. The setting.map_replacess is expected to be defined as a valid pointer to an array.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_interrupt (with error bit) on (exit) signal received.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless(). Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B index
+The index used to identify the desired range in variable, content, and ranges.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_eki_process_buffer_at\fP(3), \fIiki_read_eki_process_buffer_ranges\fP(3), \fIiki_read_eki_process_buffer_ranges_prepare\fP(3), \fIiki_read_eki_process_buffer_ranges_whole\fP(3), \fIiki_read_eki_process_buffer_total\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIiki_read_process_wrap_append()\fP, \fIiki_read_process_wrap_prepend()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIiki_read_identify_substitution()\fP, \fIiki_read_process_wrap_append()\fP, \fIiki_read_process_wrap_prepend()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges.3
new file mode 100644 (file)
index 0000000..e44632b
--- /dev/null
@@ -0,0 +1,65 @@
+.TH iki_read_eki_process_buffer_ranges "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_process_buffer_ranges \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_eki_process_buffer_ranges\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange_buffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer, printing the given range for EKI read.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_interrupt (with error bit) on (exit) signal received.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range_buffer
+The range within the buffer to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_eki_process_buffer_at\fP(3), \fIiki_read_eki_process_buffer_ranges\fP(3), \fIiki_read_eki_process_buffer_ranges_prepare\fP(3), \fIiki_read_eki_process_buffer_ranges_whole\fP(3), \fIiki_read_eki_process_buffer_total\fP(3), \fIiki_read_eki_process_buffer_ranges_prepare()\fP, \fIiki_read_eki_process_buffer_ranges_prepare()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges_prepare.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges_prepare.3
new file mode 100644 (file)
index 0000000..7a5c3e7
--- /dev/null
@@ -0,0 +1,88 @@
+.TH iki_read_eki_process_buffer_ranges_prepare "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_process_buffer_ranges_prepare \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_eki_process_buffer_ranges_prepare\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange_buffer\fP,
+    \fBf_iki_eki_t *const     \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Helper function for preparing the processing of the buffer ranges.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: Not directly changed on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range_buffer
+The range within the buffer to process.
+
+.TP
+.B data
+The IKI data structure.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the EKI data (extended IKI data).
+.PP
+vocabularys: A set of ranges representing the vocabularies (variable names) list to store each found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_eki_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_rangess_t          \fIvocabularys\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_eki_process_buffer_at\fP(3), \fIiki_read_eki_process_buffer_ranges\fP(3), \fIiki_read_eki_process_buffer_ranges_prepare\fP(3), \fIiki_read_eki_process_buffer_ranges_whole\fP(3), \fIiki_read_eki_process_buffer_total\fP(3), \fIf_memory_arrays_resize()\fP, \fIfl_iki_eki_read()\fP, \fIf_memory_arrays_resize()\fP, \fIfl_iki_eki_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges_whole.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_ranges_whole.3
new file mode 100644 (file)
index 0000000..9758dd6
--- /dev/null
@@ -0,0 +1,67 @@
+.TH iki_read_eki_process_buffer_ranges_whole "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_process_buffer_ranges_whole \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_eki_process_buffer_ranges_whole\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange_buffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer, printing the given buffer in whole mode based on the given ranges for EKI read.
+.PP
+The entire variable is replaced with the value from the associated ranges.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_interrupt (with error bit) on (exit) signal received.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range_buffer
+The range within the buffer to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_eki_process_buffer_at\fP(3), \fIiki_read_eki_process_buffer_ranges\fP(3), \fIiki_read_eki_process_buffer_ranges_prepare\fP(3), \fIiki_read_eki_process_buffer_ranges_whole\fP(3), \fIiki_read_eki_process_buffer_total\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_total.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_process_buffer_total.3
new file mode 100644 (file)
index 0000000..a3433e0
--- /dev/null
@@ -0,0 +1,38 @@
+.TH iki_read_eki_process_buffer_total "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_process_buffer_total \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_eki_process_buffer_total\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer, printing the total for EKI read.
+.PP
+Must not be NULL.
+.PP
+Status codes (with error bit) are returned on any problem.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_eki_process_buffer_at\fP(3), \fIiki_read_eki_process_buffer_ranges\fP(3), \fIiki_read_eki_process_buffer_ranges_prepare\fP(3), \fIiki_read_eki_process_buffer_ranges_whole\fP(3), \fIiki_read_eki_process_buffer_total\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_eki_setting_load.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_eki_setting_load.3
new file mode 100644 (file)
index 0000000..1569a7e
--- /dev/null
@@ -0,0 +1,66 @@
+.TH iki_read_eki_setting_load "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_eki_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid iki_read_eki_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBiki_read_main_t *const      \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the program setting load process for IKI.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: f_file_stream_open(). Errors (with error bit) from: fll_program_parameter_process_context(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_read_eki_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_identify_substitution.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_identify_substitution.3
new file mode 100644 (file)
index 0000000..7161cd7
--- /dev/null
@@ -0,0 +1,111 @@
+.TH iki_read_identify_substitution "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_identify_substitution \-
+.SH SYNOPSIS
+.nf
+.B #include <identify.h>
+.sp
+\fBf_number_unsigned_t iki_read_identify_substitution\fP(
+    \fBiki_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_range_t           \fP\fIname\fP,
+    \fBconst f_range_t           \fP\fIvalue\fP,
+    \fBf_string_triples_t *const \fP\fItriple\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the arguments, associating the last matching reassignment or substitution with a given vocabulary name and value (Object and Content).
+.PP
+This function expects appropriate sanity checks are performed on the reassignments or substitutions array before calling.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B name
+A range within setting->buffer representing the name (Object) to match.
+
+.TP
+.B value
+A range within setting->buffer representing the value (Content) to match.
+
+.TP
+.B triple
+The setting, such as setting->substitute, to update.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triples_t {
+  f_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+The matched substitution. The value of the triple.used is returned on no match.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIidentify.h\fP(3), \fIiki_read_identify_substitution\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_delete_data.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_delete_data.3
new file mode 100644 (file)
index 0000000..6aab2f0
--- /dev/null
@@ -0,0 +1,35 @@
+.TH iki_read_iki_delete_data "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_delete_data \-
+.SH SYNOPSIS
+.nf
+.B #include <iki_read.h>
+.sp
+\fBvoid iki_read_iki_delete_data\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki_read.h\fP(3), \fIiki_read_iki_delete_data\fP(3), \fIf_iki_data_delete()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_identify_alteration.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_identify_alteration.3
new file mode 100644 (file)
index 0000000..975a09f
--- /dev/null
@@ -0,0 +1,36 @@
+.TH iki_read_iki_identify_alteration "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_identify_alteration \-
+.SH SYNOPSIS
+.nf
+.B #include <identify.h>
+.sp
+\fBvoid iki_read_iki_identify_alteration\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the arguments, associating replacements and wraps with a given vocabulary.
+.PP
+This does not handle substitutions because substitutions must match both name and value (Object and Content). This function does not know the value (Content).
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+The matching setting->data.vocabulary index or if no match then setting->data.vocabulary.used.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIidentify.h\fP(3), \fIiki_read_iki_identify_alteration\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_print_data.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_print_data.3
new file mode 100644 (file)
index 0000000..4ff7e5e
--- /dev/null
@@ -0,0 +1,68 @@
+.TH iki_read_iki_print_data "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_print_data \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBvoid iki_read_iki_print_data\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the given range at the given index for IKI read.
+.PP
+This expects the caller to have the output locked appropriately.
+.PP
+This detects and prints any applicable substitution matching the vocabulary at the given index. If there is no substitution, then this prints the given range at the given index.
+.PP
+The setting.map_wrapss is expected to be defined as a valid pointer to an array. The setting.map_replacess is expected to be defined as a valid pointer to an array.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index used to identify the desired range in variable, content, and ranges.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_read_iki_print_data\fP(3), \fIiki_read_iki_print_message_help\fP(3), \fIf_print_dynamic()\fP, \fIf_print_dynamic_partial()\fP, \fIiki_read_identify_substitution()\fP, \fIiki_read_print_data_wrap_append()\fP, \fIiki_read_print_data_wrap_prepend()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_print_message_help.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_print_message_help.3
new file mode 100644 (file)
index 0000000..4836523
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_read_iki_print_message_help "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_read_iki_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for IKI read.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_read_iki_print_data\fP(3), \fIiki_read_iki_print_message_help\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_at.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_at.3
new file mode 100644 (file)
index 0000000..b80077b
--- /dev/null
@@ -0,0 +1,48 @@
+.TH iki_read_iki_process_buffer_at "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_process_buffer_at \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_iki_process_buffer_at\fP(
+    \fBiki_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the given range at the given index for IKI read.
+.PP
+This expands all of the appropriate Variables so that post-expansion calculations may be performed. This is particularly useful for preparing to print a single Line in Content and Literal modes.
+.PP
+Must not be NULL.
+.PP
+The setting.map_wrapss is expected to be defined as a valid pointer to an array. The setting.map_replacess is expected to be defined as a valid pointer to an array.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_interrupt (with error bit) on (exit) signal received.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless(). Errors (with error bit) from: f_string_dynamic_partial_append_nulless().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B index
+The index used to identify the desired range in variable, content, and ranges.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_iki_process_buffer_at\fP(3), \fIiki_read_iki_process_buffer_ranges\fP(3), \fIiki_read_iki_process_buffer_ranges_prepare\fP(3), \fIiki_read_iki_process_buffer_ranges_whole\fP(3), \fIiki_read_iki_process_buffer_total\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIiki_read_process_wrap_append()\fP, \fIiki_read_process_wrap_prepend()\fP, \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_partial_append_nulless()\fP, \fIiki_read_identify_substitution()\fP, \fIiki_read_process_wrap_append()\fP, \fIiki_read_process_wrap_prepend()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges.3
new file mode 100644 (file)
index 0000000..80ce962
--- /dev/null
@@ -0,0 +1,67 @@
+.TH iki_read_iki_process_buffer_ranges "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_process_buffer_ranges \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_iki_process_buffer_ranges\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange_buffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer, printing the given range for IKI read.
+.PP
+This prints error messages.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_parameter (with error bit) if a parameter is invalid. F_interrupt (with error bit) on (exit) signal received.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range_buffer
+The range within the buffer to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_iki_process_buffer_at\fP(3), \fIiki_read_iki_process_buffer_ranges\fP(3), \fIiki_read_iki_process_buffer_ranges_prepare\fP(3), \fIiki_read_iki_process_buffer_ranges_whole\fP(3), \fIiki_read_iki_process_buffer_total\fP(3), \fIiki_read_iki_process_buffer_ranges_prepare()\fP, \fIiki_read_iki_process_buffer_ranges_prepare()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges_prepare.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges_prepare.3
new file mode 100644 (file)
index 0000000..a8193d4
--- /dev/null
@@ -0,0 +1,88 @@
+.TH iki_read_iki_process_buffer_ranges_prepare "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_process_buffer_ranges_prepare \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_iki_process_buffer_ranges_prepare\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange_buffer\fP,
+    \fBf_iki_data_t *const    \fP\fIdata\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Helper function for preparing the processing of the buffer ranges.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: Not directly changed on success.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range_buffer
+The range within the buffer to process.
+
+.TP
+.B data
+The IKI data structure.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+This containing all of the IKI data.
+.PP
+vocabulary: A set of ranges representing the vocabulary (variable name) list to store the found vocabulary name.
+.sp
+.RS
+.nf
+\fB
+struct f_iki_data_t {
+  f_ranges_t           \fIcontent\fP;
+  f_number_unsigneds_t \fIdelimits\fP;
+  f_ranges_t           \fIvariable\fP;
+  f_ranges_t           \fIvocabulary\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_iki_process_buffer_at\fP(3), \fIiki_read_iki_process_buffer_ranges\fP(3), \fIiki_read_iki_process_buffer_ranges_prepare\fP(3), \fIiki_read_iki_process_buffer_ranges_whole\fP(3), \fIiki_read_iki_process_buffer_total\fP(3), \fIf_memory_arrays_resize()\fP, \fIfl_iki_read()\fP, \fIf_memory_arrays_resize()\fP, \fIfl_iki_read()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges_whole.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_ranges_whole.3
new file mode 100644 (file)
index 0000000..e52f232
--- /dev/null
@@ -0,0 +1,67 @@
+.TH iki_read_iki_process_buffer_ranges_whole "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_process_buffer_ranges_whole \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_iki_process_buffer_ranges_whole\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange_buffer\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer, printing the given buffer in whole mode based on the given ranges for IKI read.
+.PP
+The entire variable is replaced with the value from the associated ranges.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_interrupt (with error bit) on (exit) signal received.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range_buffer
+The range within the buffer to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_iki_process_buffer_at\fP(3), \fIiki_read_iki_process_buffer_ranges\fP(3), \fIiki_read_iki_process_buffer_ranges_prepare\fP(3), \fIiki_read_iki_process_buffer_ranges_whole\fP(3), \fIiki_read_iki_process_buffer_total\fP(3), \fIf_memory_arrays_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_total.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_process_buffer_total.3
new file mode 100644 (file)
index 0000000..9966c82
--- /dev/null
@@ -0,0 +1,38 @@
+.TH iki_read_iki_process_buffer_total "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_process_buffer_total \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_iki_process_buffer_total\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer, printing the total for IKI read.
+.PP
+Must not be NULL.
+.PP
+Status codes (with error bit) are returned on any problem.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH RETURN VALUE
+.PP
+F_okay on success.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_iki_process_buffer_at\fP(3), \fIiki_read_iki_process_buffer_ranges\fP(3), \fIiki_read_iki_process_buffer_ranges_prepare\fP(3), \fIiki_read_iki_process_buffer_ranges_whole\fP(3), \fIiki_read_iki_process_buffer_total\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_iki_setting_load.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_iki_setting_load.3
new file mode 100644 (file)
index 0000000..9bd3032
--- /dev/null
@@ -0,0 +1,66 @@
+.TH iki_read_iki_setting_load "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_iki_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid iki_read_iki_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBiki_read_main_t *const      \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the program setting load process for IKI.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: f_file_stream_open(). Errors (with error bit) from: fll_program_parameter_process_context(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_read_iki_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_main.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_main.3
new file mode 100644 (file)
index 0000000..ae3329a
--- /dev/null
@@ -0,0 +1,39 @@
+.TH iki_read_main "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_main \-
+.SH SYNOPSIS
+.nf
+.B #include <iki_read.h>
+.sp
+\fBvoid iki_read_main\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This program processes files or other input in fss format and stores the results in the iki_read_main_t.
+.PP
+This processes in accordance to the IKI specification. Execute main program.
+.PP
+F_signal_termination
+.PP
+This alters setting.state.status: F_okay on success. F_true on success when performing verification and verify passed. F_false on success when performing verification and verify failed. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL. F_failure (with error bit) for any other failure.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki_read.h\fP(3), \fIiki_read_main\fP(3), \fIiki_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_main_delete.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_main_delete.3
new file mode 100644 (file)
index 0000000..875484c
--- /dev/null
@@ -0,0 +1,35 @@
+.TH iki_read_main_delete "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid iki_read_main_delete\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIiki_read_cache_delete\fP(3), \fIiki_read_main_delete\fP(3), \fIiki_read_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIiki_read_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_line.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_line.3
new file mode 100644 (file)
index 0000000..d02c1db
--- /dev/null
@@ -0,0 +1,65 @@
+.TH iki_read_print_data_line "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_data_line \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBvoid iki_read_print_data_line\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the data from the expand cache at the line.
+.PP
+This requires that the expand cache is properly populated. The expand cache may be empty.
+.PP
+This alters print.custom.setting.state.status: F_okay on success. F_data_not on success, but total is 0 or line is out of range.
+.PP
+Error (with error bit set) from f_string_dynamic_seek_line(). Error (with error bit set) from macro_iki_read_signal_check().
+.PP
+Error (with error bit) if status already has an error before start of function.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIiki_read_print_data_line\fP(3), \fIiki_read_print_data_total\fP(3), \fIiki_read_print_data_total_expand\fP(3), \fIiki_read_print_data_wrap_append\fP(3), \fIiki_read_print_data_wrap_prepend\fP(3), \fIf_string_dynamic_seek_line()\fP, \fImacro_iki_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_total.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_total.3
new file mode 100644 (file)
index 0000000..a1b95b6
--- /dev/null
@@ -0,0 +1,67 @@
+.TH iki_read_print_data_total "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_data_total \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBvoid iki_read_print_data_total\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fI\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the number that represents the total.
+.PP
+This alters print.custom.setting.state.status: F_okay on success and data was processed. F_data_not on success, but there was no data to process (0 is printed).
+.PP
+Signal from macro_iki_read_signal_check().
+.PP
+Error (with error bit set) from f_string_dynamic_seek_line()
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIiki_read_print_data_line\fP(3), \fIiki_read_print_data_total\fP(3), \fIiki_read_print_data_total_expand\fP(3), \fIiki_read_print_data_wrap_append\fP(3), \fIiki_read_print_data_wrap_prepend\fP(3), \fImacro_iki_read_signal_check()\fP, \fIf_string_dynamic_seek_line()\fP, \fIf_string_dynamic_seek_line()\fP, \fImacro_iki_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_total_expand.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_total_expand.3
new file mode 100644 (file)
index 0000000..aa53d56
--- /dev/null
@@ -0,0 +1,67 @@
+.TH iki_read_print_data_total_expand "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_data_total_expand \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBvoid iki_read_print_data_total_expand\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Count and print the total from the data in the expand cache at the line.
+.PP
+This requires that the expand cache is properly populated. The expand cache may be empty.
+.PP
+This only checks if the flag iki_read_main_flag_line_d is set. Otherwise, the total lines from the expand cache is counted as-is.
+.PP
+This alters print.custom.setting.state.status: F_okay on success. F_data_not on success, but total is 0 or line is out of range.
+.PP
+Error (with error bit set) from f_string_dynamic_seek_line(). Error (with error bit set) from macro_iki_read_signal_check().
+.PP
+Error (with error bit) if status already has an error before start of function.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIiki_read_print_data_line\fP(3), \fIiki_read_print_data_total\fP(3), \fIiki_read_print_data_total_expand\fP(3), \fIiki_read_print_data_wrap_append\fP(3), \fIiki_read_print_data_wrap_prepend\fP(3), \fIf_string_dynamic_seek_line()\fP, \fImacro_iki_read_signal_check()\fP, \fIf_string_dynamic_seek_line()\fP, \fImacro_iki_read_signal_check()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_wrap_append.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_wrap_append.3
new file mode 100644 (file)
index 0000000..9eddd19
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_read_print_data_wrap_append "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_data_wrap_append \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBvoid iki_read_print_data_wrap_append\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the append part of the wrap at the given index, if valid.
+.PP
+This expects the caller to have the output locked appropriately.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index within the setting->map_wrapss array to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIiki_read_print_data_line\fP(3), \fIiki_read_print_data_total\fP(3), \fIiki_read_print_data_total_expand\fP(3), \fIiki_read_print_data_wrap_append\fP(3), \fIiki_read_print_data_wrap_prepend\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_wrap_prepend.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_data_wrap_prepend.3
new file mode 100644 (file)
index 0000000..da5ee88
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_read_print_data_wrap_prepend "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_data_wrap_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBvoid iki_read_print_data_wrap_prepend\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the prepend part of the wrap at the given index, if valid.
+.PP
+This expects the caller to have the output locked appropriately.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index within the setting->map_wrapss array to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIiki_read_print_data_line\fP(3), \fIiki_read_print_data_total\fP(3), \fIiki_read_print_data_total_expand\fP(3), \fIiki_read_print_data_wrap_append\fP(3), \fIiki_read_print_data_wrap_prepend\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_error.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_error.3
new file mode 100644 (file)
index 0000000..8d4c477
--- /dev/null
@@ -0,0 +1,69 @@
+.TH iki_read_print_error "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t iki_read_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIiki_read_print_error\fP(3), \fIiki_read_print_error_file\fP(3), \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_error_file.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_error_file.3
new file mode 100644 (file)
index 0000000..b87abc1
--- /dev/null
@@ -0,0 +1,132 @@
+.TH iki_read_print_error_file "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t iki_read_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIiki_read_print_error\fP(3), \fIiki_read_print_error_file\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_message_help.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_message_help.3
new file mode 100644 (file)
index 0000000..cbbc53b
--- /dev/null
@@ -0,0 +1,61 @@
+.TH iki_read_print_message_help "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid iki_read_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help.
+.PP
+The print.custom is expected to be of type iki_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIiki_read_print_message_help\fP(3), \fIiki_read_print_message_help_note\fP(3), \fIiki_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_print_message_help_note.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_print_message_help_note.3
new file mode 100644 (file)
index 0000000..aaa17d3
--- /dev/null
@@ -0,0 +1,63 @@
+.TH iki_read_print_message_help_note "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_print_message_help_note \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid iki_read_print_message_help_note\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding notes.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type iki_read_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIiki_read_print_message_help\fP(3), \fIiki_read_print_message_help_note\fP(3), \fIiki_read_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_process_buffer.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_process_buffer.3
new file mode 100644 (file)
index 0000000..5985bda
--- /dev/null
@@ -0,0 +1,41 @@
+.TH iki_read_process_buffer "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_process_buffer \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_process_buffer\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given buffer.
+.PP
+This will print error messages, except for errors in callbacks. The callbacks should handle their own error printing.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing done.
+.PP
+F_interrupt (with error bit) on (exit) signal received.
+.PP
+Errors (with error bit) from: main.call.process_buffer_ranges(). Errors (with error bit) from: main.call.process_buffer_ranges_whole(). Errors (with error bit) from: main.call.process_buffer_total().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_process_buffer\fP(3), \fIiki_read_process_buffer_at_newline\fP(3), \fIiki_read_process_line\fP(3), \fIiki_read_process_wrap_append\fP(3), \fIiki_read_process_wrap_prepend\fP(3), \fImain.call.process_buffer_ranges()\fP, \fImain.call.process_buffer_ranges_whole()\fP, \fImain.call.process_buffer_total()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_process_buffer_at_newline.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_process_buffer_at_newline.3
new file mode 100644 (file)
index 0000000..acb3fc0
--- /dev/null
@@ -0,0 +1,39 @@
+.TH iki_read_process_buffer_at_newline "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_process_buffer_at_newline \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_process_buffer_at_newline\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Append a new line at the end of the expand cache if the state status is F_okay.
+.PP
+This is intended to be called immediately after iki_read_iki_process_buffer_at() and iki_read_eki_process_buffer_at() to handle the state status.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: Success from: f_string_dynamic_append()
+.PP
+Errors (with error bit) from: f_string_dynamic_append().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_process_buffer\fP(3), \fIiki_read_process_buffer_at_newline\fP(3), \fIiki_read_process_line\fP(3), \fIiki_read_process_wrap_append\fP(3), \fIiki_read_process_wrap_prepend\fP(3), \fIiki_read_iki_process_buffer_at()\fP, \fIiki_read_eki_process_buffer_at()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append()\fP, \fIf_string_dynamic_append()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_process_line.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_process_line.3
new file mode 100644 (file)
index 0000000..e017f35
--- /dev/null
@@ -0,0 +1,61 @@
+.TH iki_read_process_line "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_process_line \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_process_line\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP,
+    \fBf_range_t *const       \fP\fIrange\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Determine the range based on the line parameter.
+.PP
+If the line parameter is not specified in the console arguments, then range is untouched. The range.start will be greater than main->buffer.used if the line is not found before buffer end is reached.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B range
+The range value to represent the line values.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_process_buffer\fP(3), \fIiki_read_process_buffer_at_newline\fP(3), \fIiki_read_process_line\fP(3), \fIiki_read_process_wrap_append\fP(3), \fIiki_read_process_wrap_prepend\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_process_wrap_append.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_process_wrap_append.3
new file mode 100644 (file)
index 0000000..fc47840
--- /dev/null
@@ -0,0 +1,42 @@
+.TH iki_read_process_wrap_append "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_process_wrap_append \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_process_wrap_append\fP(
+    \fBiki_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process the append part of the wrap at the given index adding it to the expand cache, if valid.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing added to the expand cache.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless()
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B index
+The index within the setting->map_wrapss array to print.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_process_buffer\fP(3), \fIiki_read_process_buffer_at_newline\fP(3), \fIiki_read_process_line\fP(3), \fIiki_read_process_wrap_append\fP(3), \fIiki_read_process_wrap_prepend\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_process_wrap_prepend.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_process_wrap_prepend.3
new file mode 100644 (file)
index 0000000..9ebb0f4
--- /dev/null
@@ -0,0 +1,42 @@
+.TH iki_read_process_wrap_prepend "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_process_wrap_prepend \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_read_process_wrap_prepend\fP(
+    \fBiki_read_main_t *const    \fP\fImain\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the prepend part of the wrap at the given index adding it to the expand cache, if valid.
+.PP
+Must not be NULL.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not on success, but nothing added to the expand cache.
+.PP
+Errors (with error bit) from: f_string_dynamic_append_nulless()
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B index
+The index within the setting->map_wrapss array to print.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_read_process_buffer\fP(3), \fIiki_read_process_buffer_at_newline\fP(3), \fIiki_read_process_line\fP(3), \fIiki_read_process_wrap_append\fP(3), \fIiki_read_process_wrap_prepend\fP(3), \fIf_string_dynamic_append_nulless()\fP, \fIf_string_dynamic_append_nulless()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_setting_delete.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_setting_delete.3
new file mode 100644 (file)
index 0000000..a364c56
--- /dev/null
@@ -0,0 +1,67 @@
+.TH iki_read_setting_delete "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid iki_read_setting_delete\fP(
+    \fBiki_read_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The IKI read main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+map_wrapss: Map the vocabulary location to a location containing the wrap parameter value.
+.sp
+.RS
+.nf
+\fB
+struct iki_read_setting_t {
+  uint32_t              \fIflag\fP;
+  f_state_t             \fIstate\fP;
+  f_number_unsigned_t   \fIat\fP;
+  f_number_unsigned_t   \fIline\fP;
+  f_number_unsigned_t   \fIselect\fP;
+  f_string_dynamics_t   \fInames\fP;
+  f_string_dynamics_t   \fIfiles\fP;
+  f_string_maps_t       \fIreplace\fP;
+  f_string_triples_t    \fIreassign\fP;
+  f_string_triples_t    \fIsubstitute\fP;
+  f_string_triples_t    \fIwrap\fP;
+  f_number_unsignedss_t \fImap_replacess\fP;
+  f_number_unsignedss_t \fImap_wrapss\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIiki_read_cache_delete\fP(3), \fIiki_read_main_delete\fP(3), \fIiki_read_setting_delete\fP(3), \fIf_iki_data_delete()\fP, \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_setting_load.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_setting_load.3
new file mode 100644 (file)
index 0000000..84f14c0
--- /dev/null
@@ -0,0 +1,71 @@
+.TH iki_read_setting_load "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid iki_read_setting_load\fP(
+    \fBconst f_console_arguments_t         \fP\fIarguments\fP,
+    \fBiki_read_main_t *const              \fP\fImain\fP,
+    \fBconst iki_read_settings_load_call_t \fP\fIdo_settings_load\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Set to NULL to disable.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B do_settings_load
+(optional) Designate a function to call after performing the initial processing, but before printing help. If the function returns F_done, then this function immediately returns, resetting status to F_okay.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_read_setting_load\fP(3), \fIiki_read_setting_load_parameter_substitution\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_exists()\fP, \fIf_memory_array_resize()\fP, \fIf_string_dynamic_append()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_exists()\fP, \fIf_memory_array_resize()\fP, \fIf_string_dynamic_append()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_setting_load_parameter_substitution.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_setting_load_parameter_substitution.3
new file mode 100644 (file)
index 0000000..2ea626c
--- /dev/null
@@ -0,0 +1,128 @@
+.TH iki_read_setting_load_parameter_substitution "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_setting_load_parameter_substitution \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBf_status_t iki_read_setting_load_parameter_substitution\fP(
+    \fBiki_read_main_t *const      \fP\fImain\fP,
+    \fBconst f_console_parameter_t \fP\fIparameter\fP,
+    \fBconst f_string_static_t     \fP\fIname\fP,
+    \fBf_string_triples_t *const   \fP\fItriple\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the specific parameter that uses a substitution type, such as reassign or substitute.
+.PP
+This prints error messages as appropriate.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B parameter
+
+.TP
+.B name
+The name of the parameter. This is used for printing error messages.
+
+.TP
+.B triple
+The setting, such as setting->substitute, to update.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a structure for describing console parameters for the console processing functions to use.
+.PP
+The short parameters are prepended with either '-' or '+'. The long parameters are prepended with either '' or '++'. The simple parameters have no prefix characters.
+.PP
+values: An array of locations representing where in the argv[] the values arguments are found.
+.PP
+The macro_f_console_parameter_t_initialize_1() all arguments. The macro_f_console_parameter_t_initialize_2() reduced arguments has short, long, and simple. The macro_f_console_parameter_t_initialize_3() reduced arguments has short and long. The macro_f_console_parameter_t_initialize_4() reduced arguments has short. The macro_f_console_parameter_t_initialize_5() reduced arguments has long. The macro_f_console_parameter_t_initialize_6() reduced arguments has simple. The macro_f_console_parameter_t_initialize_7() reduced arguments has none of short, long, and simple (all are set to an empty string).
+.sp
+.RS
+.nf
+\fB
+struct f_console_parameter_t {
+  f_string_static_t    \fImatch_short\fP;
+  f_string_static_t    \fImatch_long\fP;
+  f_string_static_t    \fImatch_simple\fP;
+  f_number_unsigned_t  \fIvalues_total\fP;
+  f_console_flag_t     \fIflag\fP;
+  f_console_result_t   \fIresult\fP;
+  f_number_unsigned_t  \fIlocation\fP;
+  f_number_unsigned_t  \fIlocation_sub\fP;
+  f_number_unsigneds_t \fIlocations\fP;
+  f_number_unsigneds_t \fIlocations_sub\fP;
+  f_number_unsigneds_t \fIvalues\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of string triples.
+.PP
+size: Total amount of allocated space.
+.sp
+.RS
+.nf
+\fB
+struct f_string_triples_t {
+  f_string_triple_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_true if found and processed. F_false if not found or not processed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_read_setting_load\fP(3), \fIiki_read_setting_load_parameter_substitution\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_signal_handler.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_signal_handler.3
new file mode 100644 (file)
index 0000000..b71b4c9
--- /dev/null
@@ -0,0 +1,41 @@
+.TH iki_read_signal_handler "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid iki_read_signal_handler\fP(
+    \fBiki_read_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIiki_read_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_read/data/documentation/man/man3/iki_read_thread_signal.3 b/level_3/iki_read/data/documentation/man/man3/iki_read_thread_signal.3
new file mode 100644 (file)
index 0000000..3384598
--- /dev/null
@@ -0,0 +1,38 @@
+.TH iki_read_thread_signal "3" "January 2026" "FLL - IKI Read 0.8.0" "Program Functions"
+.SH "NAME"
+iki_read_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * iki_read_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type iki_read_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIiki_read_thread_signal\fP(3), \fIiki_read_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIiki_read_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 9b8c249b86b4302f8a09325328287aed766e52f4..27d9b99dc3ee39d45205a69f689c0f3544a204d5 100644 (file)
@@ -1,4 +1,4 @@
-.TH IKI_WRITE "1" "November 2025" "FLL - IKI Write 0.8.0" "User Commands"
+.TH IKI_WRITE "1" "January 2026" "FLL - IKI Write 0.8.0" "User Commands"
 .SH NAME
 iki_write \- Convert text into an IKI format.
 .SH SYNOPSIS
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_cache_delete.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_cache_delete.3
new file mode 100644 (file)
index 0000000..bc43d1f
--- /dev/null
@@ -0,0 +1,54 @@
+.TH iki_write_cache_delete "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_cache_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid iki_write_cache_delete\fP(
+    \fBiki_write_cache_t *const \fP\fIcache\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main cache data.
+.PP
+Must not be NULL.
+.SH PARAMETERS
+.TP
+.B cache
+The program main cache data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The IKI write main program cache.
+.PP
+objects: A buffer used to hold Objects during processing.
+.sp
+.RS
+.nf
+\fB
+struct iki_write_cache_t {
+  f_string_dynamic_t  \fIbuffer\fP;
+  f_string_dynamic_t  \fIcontent\fP;
+  f_string_dynamic_t  \fIiki\fP;
+  f_string_dynamics_t \fIobjects\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIiki_write_cache_delete\fP(3), \fIiki_write_main_delete\fP(3), \fIiki_write_setting_delete\fP(3), \fIf_memory_array_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_eki_load_objects_content_pipe.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_eki_load_objects_content_pipe.3
new file mode 100644 (file)
index 0000000..3256b60
--- /dev/null
@@ -0,0 +1,72 @@
+.TH iki_write_eki_load_objects_content_pipe "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_eki_load_objects_content_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_write_eki_load_objects_content_pipe\fP(
+    \fBiki_write_main_t *const \fP\fImain\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBuint8_t *const          \fP\fIpipe_state\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the Objects and Content from the given pipe information.
+.PP
+This function prints errors.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_iki_write().
+.PP
+0x1: Object is found and processed.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B range
+The range within the buffer representing the objects.
+
+.TP
+.B pipe_state
+Designate that the Object part of the pipe is complete. For EKI, this may represent the end of the entire set of multiple Objects.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_write_eki_load_objects_content_pipe\fP(3), \fIiki_write_eki_process_objects_content\fP(3), \fIf_iki_write()\fP, \fIf_iki_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_error_objects_not_valid.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_error_objects_not_valid.3
new file mode 100644 (file)
index 0000000..6edf278
--- /dev/null
@@ -0,0 +1,86 @@
+.TH iki_write_eki_print_error_objects_not_valid "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_eki_print_error_objects_not_valid \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_write_eki_print_error_objects_not_valid\fP(
+    \fBfl_print_t *const        \fP\fIprint\fP,
+    \fBconst f_string_statics_t \fP\fIobjects\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about an Object not being valid.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B objects
+The a strings representing the objects that are not valid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_eki_print_error_objects_not_valid\fP(3), \fIiki_write_eki_print_message_help\fP(3), \fIiki_write_eki_print_message_help_note_pipe\fP(3), \fIiki_write_print_eki_error_objects_match_content\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_message_help.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_message_help.3
new file mode 100644 (file)
index 0000000..8869809
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_write_eki_print_message_help "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_eki_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_write_eki_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for EKI write.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_eki_print_error_objects_not_valid\fP(3), \fIiki_write_eki_print_message_help\fP(3), \fIiki_write_eki_print_message_help_note_pipe\fP(3), \fIiki_write_print_eki_error_objects_match_content\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_message_help_note_pipe.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_eki_print_message_help_note_pipe.3
new file mode 100644 (file)
index 0000000..6ab5860
--- /dev/null
@@ -0,0 +1,59 @@
+.TH iki_write_eki_print_message_help_note_pipe "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_eki_print_message_help_note_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBvoid iki_write_eki_print_message_help_note_pipe\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print note pipe help for EKI write.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_eki_print_error_objects_not_valid\fP(3), \fIiki_write_eki_print_message_help\fP(3), \fIiki_write_eki_print_message_help_note_pipe\fP(3), \fIiki_write_print_eki_error_objects_match_content\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_eki_process_objects_content.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_eki_process_objects_content.3
new file mode 100644 (file)
index 0000000..4df54f1
--- /dev/null
@@ -0,0 +1,94 @@
+.TH iki_write_eki_process_objects_content "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_eki_process_objects_content \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_write_eki_process_objects_content\fP(
+    \fBiki_write_main_t *const  \fP\fImain\fP,
+    \fBconst f_string_statics_t \fP\fIobjects\fP,
+    \fBconst f_string_static_t  \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given object and content, printing it.
+.PP
+This function prints errors.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_iki_eki_write().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B objects
+The objects to process and print.
+
+.TP
+.B content
+The content to process and print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_write_eki_load_objects_content_pipe\fP(3), \fIiki_write_eki_process_objects_content\fP(3), \fIf_iki_eki_write()\fP, \fIf_iki_eki_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_eki_setting_load.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_eki_setting_load.3
new file mode 100644 (file)
index 0000000..3bc2df8
--- /dev/null
@@ -0,0 +1,66 @@
+.TH iki_write_eki_setting_load "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_eki_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid iki_write_eki_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBiki_write_main_t *const     \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the program setting load process for EKI.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: f_file_stream_open(). Errors (with error bit) from: fll_program_parameter_process_context(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_write_eki_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_iki_load_objects_content_pipe.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_iki_load_objects_content_pipe.3
new file mode 100644 (file)
index 0000000..2ef1278
--- /dev/null
@@ -0,0 +1,72 @@
+.TH iki_write_iki_load_objects_content_pipe "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_iki_load_objects_content_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_write_iki_load_objects_content_pipe\fP(
+    \fBiki_write_main_t *const \fP\fImain\fP,
+    \fBconst f_range_t         \fP\fIrange\fP,
+    \fBuint8_t *const          \fP\fIpipe_state\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Load the Objects and Content from the given pipe information.
+.PP
+This function prints errors.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_iki_write().
+.PP
+0x1: Object is found and processed.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B range
+The range within the buffer representing the objects.
+
+.TP
+.B pipe_state
+Designate that the Object part of the pipe is complete.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A structure designating a start and stop range for some string.
+.PP
+In general, this project uses the start and stop position inclusively, meaning that a range of 0 to 1 would include positions 0 and position 1. Therefore, a range from 0 to 0 would be include position 0. Set start to some value larger than stop to designate that there is no range (such as start = 1, stop = 0).
+.PP
+stop: The inclusive stop position.
+.sp
+.RS
+.nf
+\fB
+struct f_range_t {
+  f_number_unsigned_t \fIstart\fP;
+  f_number_unsigned_t \fIstop\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_write_iki_load_objects_content_pipe\fP(3), \fIiki_write_iki_process_objects_content\fP(3), \fIf_iki_write()\fP, \fIf_iki_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_error_object_not_valid.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_error_object_not_valid.3
new file mode 100644 (file)
index 0000000..7911338
--- /dev/null
@@ -0,0 +1,92 @@
+.TH iki_write_iki_print_error_object_not_valid "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_iki_print_error_object_not_valid \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_write_iki_print_error_object_not_valid\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIobject\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about an Object not being valid.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B object
+The a string representing the object that is not valid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_iki_print_error_object_not_valid\fP(3), \fIiki_write_iki_print_message_help\fP(3), \fIiki_write_iki_print_message_help_note_pipe\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_message_help.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_message_help.3
new file mode 100644 (file)
index 0000000..cf472d5
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_write_iki_print_message_help "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_iki_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_write_iki_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help for IKI write.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_iki_print_error_object_not_valid\fP(3), \fIiki_write_iki_print_message_help\fP(3), \fIiki_write_iki_print_message_help_note_pipe\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_message_help_note_pipe.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_iki_print_message_help_note_pipe.3
new file mode 100644 (file)
index 0000000..a864609
--- /dev/null
@@ -0,0 +1,59 @@
+.TH iki_write_iki_print_message_help_note_pipe "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_iki_print_message_help_note_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBvoid iki_write_iki_print_message_help_note_pipe\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print note pipe help for IKI write.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_iki_print_error_object_not_valid\fP(3), \fIiki_write_iki_print_message_help\fP(3), \fIiki_write_iki_print_message_help_note_pipe\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_iki_process_objects_content.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_iki_process_objects_content.3
new file mode 100644 (file)
index 0000000..c47b638
--- /dev/null
@@ -0,0 +1,94 @@
+.TH iki_write_iki_process_objects_content "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_iki_process_objects_content \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid iki_write_iki_process_objects_content\fP(
+    \fBiki_write_main_t *const  \fP\fImain\fP,
+    \fBconst f_string_statics_t \fP\fIobjects\fP,
+    \fBconst f_string_static_t  \fP\fIcontent\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process a given object and content, printing it.
+.PP
+This function prints errors.
+.PP
+Must not be NULL.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_iki_write().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B objects
+The objects to process and print.
+
+.TP
+.B content
+The content to process and print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+An array of static strings.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_statics_t {
+  f_string_static_t  *\fIarray\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIiki_write_iki_load_objects_content_pipe\fP(3), \fIiki_write_iki_process_objects_content\fP(3), \fIf_iki_write()\fP, \fIf_iki_write()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_iki_setting_load.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_iki_setting_load.3
new file mode 100644 (file)
index 0000000..28854fc
--- /dev/null
@@ -0,0 +1,66 @@
+.TH iki_write_iki_setting_load "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_iki_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid iki_write_iki_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBiki_write_main_t *const     \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the program setting load process for IKI.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: f_file_stream_open(). Errors (with error bit) from: fll_program_parameter_process_context(). Errors (with error bit) from: fll_program_parameter_process_verbosity_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_write_iki_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_main.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_main.3
new file mode 100644 (file)
index 0000000..2d889a5
--- /dev/null
@@ -0,0 +1,41 @@
+.TH iki_write_main "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_main \-
+.SH SYNOPSIS
+.nf
+.B #include <iki_write.h>
+.sp
+\fBvoid iki_write_main\fP(
+    \fBiki_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+This program processes files or other input in fss format.
+.PP
+This processes in accordance to the IKI specification. Execute main program.
+.PP
+F_signal_termination
+.PP
+This alters main.setting.state.status: F_okay on success. F_interrupt on (exit) signal received.
+.PP
+F_failure (with error bit) on processing failure. F_parameter (with error bit) if main is NULL or setting is NULL.
+.PP
+Errors (with error bit) from: iki_write_process().
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIiki_write.h\fP(3), \fIiki_write_main\fP(3), \fIiki_write_process()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_main_delete.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_main_delete.3
new file mode 100644 (file)
index 0000000..ee7a515
--- /dev/null
@@ -0,0 +1,35 @@
+.TH iki_write_main_delete "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid iki_write_main_delete\fP(
+    \fBiki_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIiki_write_cache_delete\fP(3), \fIiki_write_main_delete\fP(3), \fIiki_write_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIiki_write_cache_delete()\fP, \fIiki_write_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_print_eki_error_objects_match_content.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_print_eki_error_objects_match_content.3
new file mode 100644 (file)
index 0000000..829182f
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_write_print_eki_error_objects_match_content "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_print_eki_error_objects_match_content \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t iki_write_print_eki_error_objects_match_content\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about the Objects not having a matching Content.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIiki_write_eki_print_error_objects_not_valid\fP(3), \fIiki_write_eki_print_message_help\fP(3), \fIiki_write_eki_print_message_help_note_pipe\fP(3), \fIiki_write_print_eki_error_objects_match_content\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_print_error.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_print_error.3
new file mode 100644 (file)
index 0000000..7c0fac4
--- /dev/null
@@ -0,0 +1,69 @@
+.TH iki_write_print_error "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t iki_write_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIiki_write_print_error\fP(3), \fIiki_write_print_error_file\fP(3), \fIiki_write_print_error_main_missing\fP(3), \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_print_error_file.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_print_error_file.3
new file mode 100644 (file)
index 0000000..03d0774
--- /dev/null
@@ -0,0 +1,132 @@
+.TH iki_write_print_error_file "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t iki_write_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIdebug\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIiki_write_print_error\fP(3), \fIiki_write_print_error_file\fP(3), \fIiki_write_print_error_main_missing\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_print_error_main_missing.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_print_error_main_missing.3
new file mode 100644 (file)
index 0000000..fd6abb7
--- /dev/null
@@ -0,0 +1,64 @@
+.TH iki_write_print_error_main_missing "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_print_error_main_missing \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t iki_write_print_error_main_missing\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message about "main" Object being missing.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIiki_write_print_error\fP(3), \fIiki_write_print_error_file\fP(3), \fIiki_write_print_error_main_missing\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_print_message_help.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_print_message_help.3
new file mode 100644 (file)
index 0000000..6432cbe
--- /dev/null
@@ -0,0 +1,66 @@
+.TH iki_write_print_message_help "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t iki_write_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help.
+.PP
+The print.custom is expected to be of type iki_write_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if a parameter is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIiki_write_print_message_help\fP(3), \fIiki_write_print_message_help_note\fP(3), \fIiki_write_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_print_message_help_note.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_print_message_help_note.3
new file mode 100644 (file)
index 0000000..164d4e4
--- /dev/null
@@ -0,0 +1,63 @@
+.TH iki_write_print_message_help_note "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_print_message_help_note \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBvoid iki_write_print_message_help_note\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print standard parts of the help regarding notes.
+.PP
+This is expected to be called as part of the help printing and does not perform any locking.
+.PP
+The print.custom is expected to be of type iki_write_main_t.
+.PP
+This does not alter print.custom.setting.state.status.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIiki_write_print_message_help\fP(3), \fIiki_write_print_message_help_note\fP(3), \fIiki_write_main_t\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_setting_delete.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_setting_delete.3
new file mode 100644 (file)
index 0000000..824252d
--- /dev/null
@@ -0,0 +1,59 @@
+.TH iki_write_setting_delete "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid iki_write_setting_delete\fP(
+    \fBiki_write_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The IKI write main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+objectss: An array of an array of objects passed as values to the "--object" parameter.
+.sp
+.RS
+.nf
+\fB
+struct iki_write_setting_t {
+  uint16_t             \fIflag\fP;
+  f_state_t            \fIstate\fP;
+  f_string_static_t    \fIquote\fP;
+  f_string_dynamics_t  \fIcontents\fP;
+  f_string_dynamicss_t \fIobjectss\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIiki_write_cache_delete\fP(3), \fIiki_write_main_delete\fP(3), \fIiki_write_setting_delete\fP(3), \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_setting_load.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_setting_load.3
new file mode 100644 (file)
index 0000000..cc940dc
--- /dev/null
@@ -0,0 +1,71 @@
+.TH iki_write_setting_load "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid iki_write_setting_load\fP(
+    \fBconst f_console_arguments_t          \fP\fIarguments\fP,
+    \fBiki_write_main_t *const              \fP\fImain\fP,
+    \fBconst iki_write_settings_load_call_t \fP\fIdo_settings_load\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Set to NULL to disable.
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B do_settings_load
+(optional) Designate a function to call after performing the initial processing, but before printing help. If the function returns F_done, then this function immediately returns, resetting status to F_okay.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIiki_write_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP, \fIf_console_parameter_process()\fP, \fIf_file_stream_open()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIfll_program_parameter_process_verbosity_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_signal_handler.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_signal_handler.3
new file mode 100644 (file)
index 0000000..9508b7c
--- /dev/null
@@ -0,0 +1,41 @@
+.TH iki_write_signal_handler "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid iki_write_signal_handler\fP(
+    \fBiki_write_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIiki_write_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/iki_write/data/documentation/man/man3/iki_write_thread_signal.3 b/level_3/iki_write/data/documentation/man/man3/iki_write_thread_signal.3
new file mode 100644 (file)
index 0000000..366ad96
--- /dev/null
@@ -0,0 +1,38 @@
+.TH iki_write_thread_signal "3" "January 2026" "FLL - IKI Write 0.8.0" "Program Functions"
+.SH "NAME"
+iki_write_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * iki_write_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type iki_write_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIiki_write_thread_signal\fP(3), \fIiki_write_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIiki_write_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 702ab8f275daf712141c8bb069722c88efa56285..add58ad01f8fb442b26ca28e276a439bd188ca6a 100644 (file)
@@ -1,4 +1,4 @@
-.TH FSS_STATUS_CODE "1" "November 2025" "FLL - FSS Status Code 0.8.0" "User Commands"
+.TH FSS_STATUS_CODE "1" "January 2026" "FLL - FSS Status Code 0.8.0" "User Commands"
 .SH NAME
 fss_status_code \- Convert to or from status codes returned by FLL programs with FSS codes.
 .SH SYNOPSIS
index 305b86c1f7924a559a4811453f402b1b43e1be2c..127174395cd710351c4ca0699300ca8a9d7f3aac 100644 (file)
@@ -1,4 +1,4 @@
-.TH STATUS_CODE "1" "November 2025" "FLL - Status Code 0.8.0" "User Commands"
+.TH STATUS_CODE "1" "January 2026" "FLL - Status Code 0.8.0" "User Commands"
 .SH NAME
 status_code \- Convert to or from status codes returned by FLL programs.
 .SH SYNOPSIS
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_convert_number.3 b/level_3/status_code/data/documentation/man/man3/status_code_convert_number.3
new file mode 100644 (file)
index 0000000..0ed72bc
--- /dev/null
@@ -0,0 +1,71 @@
+.TH status_code_convert_number 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_convert_number \-
+.SH SYNOPSIS
+.nf
+.B #include <convert.h>
+.sp
+\fBvoid status_code_convert_number\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t   \fP\fIvalue\fP,
+    \fBf_number_unsigned_t      *\fP\fInumber\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert the value string to the number, reporting any errors.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not if string starts wth a null (length is 0). F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found. F_number (with error bit) if parameter is not a number. F_number_negative (with error bit) on negative value. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: fl_console_parameter_to_number_unsigned().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B value
+The parameter value to process.
+
+.TP
+.B number
+The converted number. Will not be updated on error.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIconvert.h\fP(3), \fIstatus_code_convert_number\fP(3), \fIfl_console_parameter_to_number_unsigned()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_fss_print_help_detail.3 b/level_3/status_code/data/documentation/man/man3/status_code_fss_print_help_detail.3
new file mode 100644 (file)
index 0000000..5c91cef
--- /dev/null
@@ -0,0 +1,66 @@
+.TH status_code_fss_print_help_detail 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_fss_print_help_detail \-
+.SH SYNOPSIS
+.nf
+.B #include <print.h>
+.sp
+\fBf_status_t status_code_fss_print_help_detail\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help detailed part of the help for fss_status_code.
+.PP
+This is designed to be called from within status_code_print_message_help(). This neither locks nor unlocks the stream and expects the stream to be unlocked.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprint.h\fP(3), \fIstatus_code_fss_print_help_detail\fP(3), \fIstatus_code_print_message_help()\fP, \fIfl_print_format()\fP, \fIstatus_code_print_message_help()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_main.3 b/level_3/status_code/data/documentation/man/man3/status_code_main.3
new file mode 100644 (file)
index 0000000..b8d7465
--- /dev/null
@@ -0,0 +1,37 @@
+.TH status_code_main 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_main \-
+.SH SYNOPSIS
+.nf
+.B #include <status_code.h>
+.sp
+\fBvoid status_code_main\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+F_signal_termination
+.PP
+This alters main.setting.state.status: F_okay on success. F_true on success when performing verification and verify passed. F_false on success when performing verification and verify failed. F_interrupt on (exit) signal received.
+.PP
+F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data and settings.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIstatus_code.h\fP(3), \fIstatus_code_main\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_main_delete.3 b/level_3/status_code/data/documentation/man/man3/status_code_main_delete.3
new file mode 100644 (file)
index 0000000..a944d8f
--- /dev/null
@@ -0,0 +1,35 @@
+.TH status_code_main_delete 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid status_code_main_delete\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data..
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIstatus_code_main_delete\fP(3), \fIstatus_code_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIstatus_code_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_data_code.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_data_code.3
new file mode 100644 (file)
index 0000000..31b4e3a
--- /dev/null
@@ -0,0 +1,67 @@
+.TH status_code_print_data_code 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_data_code \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t status_code_print_data_code\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint16_t    \fP\fIcode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic code.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B code
+The code to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIstatus_code_print_data_code\fP(3), \fIstatus_code_print_data_context_value\fP(3), \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_data_context_value.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_data_context_value.3
new file mode 100644 (file)
index 0000000..703d423
--- /dev/null
@@ -0,0 +1,117 @@
+.TH status_code_print_data_context_value 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_data_context_value \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t status_code_print_data_context_value\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_color_set_t     \fP\fIcontext\fP,
+    \fBconst f_string_static_t \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic context wrapped value.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B context
+The context string to wrap the variable with.
+
+.TP
+.B value
+The value string.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+Provide a set of two colors, a before and an after.
+.PP
+This is intended to be used for printing, such that the printed code is prefixed with the "before" and postfixed with the "after". These color strings should be NULL terminated.
+.PP
+after: A pointer to the dynamic string representing the after color to assign, set to NULL to disable.
+.sp
+.RS
+.nf
+\fB
+struct f_color_set_t {
+  const f_string_static_t  *\fIbefore\fP;
+  const f_string_static_t  *\fIafter\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIstatus_code_print_data_code\fP(3), \fIstatus_code_print_data_context_value\fP(3), \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_error.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_error.3
new file mode 100644 (file)
index 0000000..df158de
--- /dev/null
@@ -0,0 +1,69 @@
+.TH status_code_print_error 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t status_code_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIdebug\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print generic error message regarding a function failing in some way.
+.PP
+Set to NULL to disable.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B debug
+(optional) The debug details, such as file, line number, and function.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIstatus_code_print_error\fP(3), \fIstatus_code_print_error_cannot_error_warning_number\fP(3), \fIstatus_code_print_error_invalid_callback\fP(3), \fIstatus_code_print_error_no_status_codes\fP(3), \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_error_cannot_error_warning_number.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_error_cannot_error_warning_number.3
new file mode 100644 (file)
index 0000000..23f6cbd
--- /dev/null
@@ -0,0 +1,64 @@
+.TH status_code_print_error_cannot_error_warning_number 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_error_cannot_error_warning_number \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t status_code_print_error_cannot_error_warning_number\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message when error parameter and warning parameter are specified without number parameter.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIstatus_code_print_error\fP(3), \fIstatus_code_print_error_cannot_error_warning_number\fP(3), \fIstatus_code_print_error_invalid_callback\fP(3), \fIstatus_code_print_error_no_status_codes\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_error_invalid_callback.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_error_invalid_callback.3
new file mode 100644 (file)
index 0000000..62807a7
--- /dev/null
@@ -0,0 +1,67 @@
+.TH status_code_print_error_invalid_callback 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_error_invalid_callback \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t status_code_print_error_invalid_callback\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message when a callback from status_code_setting_t is invalid.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the callback setting that is invalid. This should either be 'call.string_from' or 'call.string_to'.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIstatus_code_print_error\fP(3), \fIstatus_code_print_error_cannot_error_warning_number\fP(3), \fIstatus_code_print_error_invalid_callback\fP(3), \fIstatus_code_print_error_no_status_codes\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_error_no_status_codes.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_error_no_status_codes.3
new file mode 100644 (file)
index 0000000..deb4562
--- /dev/null
@@ -0,0 +1,64 @@
+.TH status_code_print_error_no_status_codes 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_error_no_status_codes \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t status_code_print_error_no_status_codes\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error message when no status codes are provided.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIstatus_code_print_error\fP(3), \fIstatus_code_print_error_cannot_error_warning_number\fP(3), \fIstatus_code_print_error_invalid_callback\fP(3), \fIstatus_code_print_error_no_status_codes\fP(3), \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_message_help.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_message_help.3
new file mode 100644 (file)
index 0000000..2e41ef5
--- /dev/null
@@ -0,0 +1,64 @@
+.TH status_code_print_message_help 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t status_code_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIstatus_code_print_message_help\fP(3), \fIstatus_code_print_message_help_detail\fP(3), \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic_raw()\fP, \fIfl_print_format()\fP, \fIfll_program_print_help_header()\fP, \fIfll_program_print_help_option()\fP, \fIfll_program_print_help_option_standard()\fP, \fIfll_program_print_help_usage()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_print_message_help_detail.3 b/level_3/status_code/data/documentation/man/man3/status_code_print_message_help_detail.3
new file mode 100644 (file)
index 0000000..6f3566c
--- /dev/null
@@ -0,0 +1,66 @@
+.TH status_code_print_message_help_detail 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_print_message_help_detail \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t status_code_print_message_help_detail\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print help detailed part of the help.
+.PP
+This is designed to be called from within status_code_print_message_help(). This neither locks nor unlocks the stream and expects the stream to be unlocked.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIstatus_code_print_message_help\fP(3), \fIstatus_code_print_message_help_detail\fP(3), \fIstatus_code_print_message_help()\fP, \fIfl_print_format()\fP, \fIstatus_code_print_message_help()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_process_check.3 b/level_3/status_code/data/documentation/man/man3/status_code_process_check.3
new file mode 100644 (file)
index 0000000..d4ba3c6
--- /dev/null
@@ -0,0 +1,66 @@
+.TH status_code_process_check 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_process_check \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid status_code_process_check\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t   \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the 'check' processes, such as fine or error.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not if string starts wth a null (length is 0). F_parameter (with error bit) if a parameter is invalid. F_number (with error bit) if parameter is not a number. F_number_negative (with error bit) on negative value. F_number_overflow (with error bit) on integer overflow. F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found.
+.PP
+Errors (with error bit) from: fss_status_code_convert_number().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B value
+The parameter value to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIstatus_code_process_check\fP(3), \fIstatus_code_process_normal\fP(3), \fIstatus_code_process_number\fP(3), \fIfss_status_code_convert_number()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_process_normal.3 b/level_3/status_code/data/documentation/man/man3/status_code_process_normal.3
new file mode 100644 (file)
index 0000000..3b4401e
--- /dev/null
@@ -0,0 +1,66 @@
+.TH status_code_process_normal 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_process_normal \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid status_code_process_normal\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t   \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the normal processes.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not if string starts wth a null (length is 0). F_complete_not_utf (with error bit) if an incomplete UTF-8 fragment is found. F_number (with error bit) if parameter is not a number. F_number_negative (with error bit) on negative value. F_number_overflow (with error bit) on integer overflow. F_parameter (with error bit) if a parameter is invalid.
+.PP
+Errors (with error bit) from: f_status_string_to(). Errors (with error bit) from: fll_fss_status_string_to(). Errors (with error bit) from: fss_status_code_convert_number().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B value
+The parameter value to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIstatus_code_process_check\fP(3), \fIstatus_code_process_normal\fP(3), \fIstatus_code_process_number\fP(3), \fIf_status_string_to()\fP, \fIfll_fss_status_string_to()\fP, \fIf_status_string_to()\fP, \fIfll_fss_status_string_to()\fP, \fIfss_status_code_convert_number()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_process_number.3 b/level_3/status_code/data/documentation/man/man3/status_code_process_number.3
new file mode 100644 (file)
index 0000000..00f6d9b
--- /dev/null
@@ -0,0 +1,66 @@
+.TH status_code_process_number 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_process_number \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid status_code_process_number\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP,
+    \fBconst f_string_static_t   \fP\fIvalue\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the 'number' processes, such as number.
+.PP
+This alters setting.state.status: F_okay on success. F_data_not if string is empty.
+.PP
+Errors (with error bit) from: fl_console_parameter_to_number_unsigned(). Errors (with error bit) from: fl_status_string_from(). Errors (with error bit) from: fll_fss_status_string_to().
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.TP
+.B value
+The parameter value to process.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIstatus_code_process_check\fP(3), \fIstatus_code_process_normal\fP(3), \fIstatus_code_process_number\fP(3), \fIfl_status_string_from()\fP, \fIfll_fss_status_string_to()\fP, \fIfl_console_parameter_to_number_unsigned()\fP, \fIfl_status_string_from()\fP, \fIfll_fss_status_string_from()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_setting_delete.3 b/level_3/status_code/data/documentation/man/man3/status_code_setting_delete.3
new file mode 100644 (file)
index 0000000..5261c65
--- /dev/null
@@ -0,0 +1,58 @@
+.TH status_code_setting_delete 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid status_code_setting_delete\fP(
+    \fBstatus_code_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The status code main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+state: The state data used when processing the FSS data.
+.sp
+.RS
+.nf
+\fB
+struct status_code_setting_t {
+  uint16_t                  \fIflag\fP;
+  f_state_t                 \fIstate\fP;
+  const f_string_static_t  *\fIprogram_name\fP;
+  const f_string_static_t  *\fIprogram_name_long\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIstatus_code_main_delete\fP(3), \fIstatus_code_setting_delete\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_setting_load.3 b/level_3/status_code/data/documentation/man/man3/status_code_setting_load.3
new file mode 100644 (file)
index 0000000..a2d0200
--- /dev/null
@@ -0,0 +1,66 @@
+.TH status_code_setting_load 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid status_code_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fBstatus_code_main_t *const   \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: fll_program_parameter_process_context_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The program and settings data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIstatus_code_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_signal_handler.3 b/level_3/status_code/data/documentation/man/man3/status_code_signal_handler.3
new file mode 100644 (file)
index 0000000..3b2d466
--- /dev/null
@@ -0,0 +1,41 @@
+.TH status_code_signal_handler 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid status_code_signal_handler\fP(
+    \fBstatus_code_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIstatus_code_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/status_code/data/documentation/man/man3/status_code_thread_signal.3 b/level_3/status_code/data/documentation/man/man3/status_code_thread_signal.3
new file mode 100644 (file)
index 0000000..6c4e408
--- /dev/null
@@ -0,0 +1,38 @@
+.TH status_code_thread_signal 3 "3" "January 2026" "FLL - Status Code 0.8.0" "Program Functions"
+.SH "NAME"
+status_code_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * status_code_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type status_code_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIstatus_code_thread_signal\fP(3), \fIstatus_code_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIstatus_code_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
index 48c932d63273d7db6f4d02d720f82c64eaa2bb5a..f8be14f2d8ee900d5fff906515ac094998b385b1 100644 (file)
@@ -1,4 +1,4 @@
-.TH UTF8 "1" "November 2025" "FLL - UTF8 0.8.0" "User Commands"
+.TH UTF8 "1" "January 2026" "FLL - UTF8 0.8.0" "User Commands"
 .SH NAME
 utf8 \- Convert to byte sequences to or from Unicode codepoints.
 .SH SYNOPSIS
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_convert_bytesequence.3 b/level_3/utf8/data/documentation/man/man3/utf8_convert_bytesequence.3
new file mode 100644 (file)
index 0000000..f4e0779
--- /dev/null
@@ -0,0 +1,70 @@
+.TH utf8_convert_bytesequence "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_convert_bytesequence \-
+.SH SYNOPSIS
+.nf
+.B #include <bytesequence.h>
+.sp
+\fBvoid utf8_convert_bytesequence\fP(
+    \fButf8_main_t *const      \fP\fImain\fP,
+    \fBconst f_string_static_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the bytesequence functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Convert a byte sequence character to another format.
+.PP
+This automatically determines the output format and is also handles the verify process.
+.PP
+This alters setting.state.status: F_okay on success. F_utf_not on invalid UTF-8 (which is still "success" when verifying).
+.PP
+F_utf_not (with error bit) if not verifying and
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B sequence
+A byte sequences representing a single character to convert. This does not stop on NULL and will process all text until sequence.used.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbytesequence.h\fP(3), \fIutf8_convert_bytesequence\fP(3), \fIutf8_process_file_bytesequence\fP(3), \fIf_utf_unicode_to()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_convert_codepoint.3 b/level_3/utf8/data/documentation/man/man3/utf8_convert_codepoint.3
new file mode 100644 (file)
index 0000000..f623cde
--- /dev/null
@@ -0,0 +1,75 @@
+.TH utf8_convert_codepoint "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_convert_codepoint \-
+.SH SYNOPSIS
+.nf
+.B #include <codepoint.h>
+.sp
+\fBvoid utf8_convert_codepoint\fP(
+    \fButf8_main_t *const      \fP\fImain\fP,
+    \fBconst f_string_static_t \fP\fIunicode\fP,
+    \fBuint8_t                *\fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the codepoint functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Convert a codepoint character representation to another format.
+.PP
+This automatically determines the output format and also handles the verify process.
+.PP
+This alters setting.state.status: F_okay on success. F_utf_not on invalid UTF-8 (which is still "success" when verifying).
+.PP
+F_utf_not (with error bit) if not verifying and the Unicode value is invalid.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B unicode
+A set of bytes representing a single codepoint character to process.
+
+.TP
+.B mode
+The codepoint mode the text is currently in.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcodepoint.h\fP(3), \fIutf8_convert_codepoint\fP(3), \fIutf8_convert_raw\fP(3), \fIutf8_detect_codepoint\fP(3), \fIutf8_process_file_codepoint\fP(3), \fIf_utf_unicode_to()\fP, \fIf_utf_unicode_to()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_convert_raw.3 b/level_3/utf8/data/documentation/man/man3/utf8_convert_raw.3
new file mode 100644 (file)
index 0000000..20429cb
--- /dev/null
@@ -0,0 +1,73 @@
+.TH utf8_convert_raw "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_convert_raw \-
+.SH SYNOPSIS
+.nf
+.B #include <codepoint.h>
+.sp
+\fBvoid utf8_convert_raw\fP(
+    \fButf8_main_t *const      \fP\fImain\fP,
+    \fBconst f_string_static_t \fP\fIhex\fP,
+    \fBuint8_t                *\fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Convert a raw character representation (hex-digit) to another format.
+.PP
+This automatically determines the output format and also handles the verify process.
+.PP
+This alters setting.state.status: F_okay on success. F_valid_not on invalid raw (which is still "success" when verifying).
+.PP
+F_valid_not (with error bit) if not verifying and the raw value is invalid.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B hex
+A set of bytes representing hexidecimal digits of a character to process.
+
+.TP
+.B mode
+The codepoint mode the text is currently in.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcodepoint.h\fP(3), \fIutf8_convert_codepoint\fP(3), \fIutf8_convert_raw\fP(3), \fIutf8_detect_codepoint\fP(3), \fIutf8_process_file_codepoint\fP(3), \fIfl_conversion_dynamic_to_unsigned_detect()\fP, \fIfl_conversion_dynamic_to_unsigned_detect()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_detect_codepoint.3 b/level_3/utf8/data/documentation/man/man3/utf8_detect_codepoint.3
new file mode 100644 (file)
index 0000000..2c2ab47
--- /dev/null
@@ -0,0 +1,69 @@
+.TH utf8_detect_codepoint "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_detect_codepoint \-
+.SH SYNOPSIS
+.nf
+.B #include <codepoint.h>
+.sp
+\fBvoid utf8_detect_codepoint\fP(
+    \fButf8_main_t *const      \fP\fImain\fP,
+    \fBconst f_string_static_t \fP\fIunicode\fP,
+    \fBuint8_t                *\fP\fImode\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Detect a codepoint character.
+.PP
+This alters setting.state.status: F_okay on success. F_next on success, but should not be processed (it is white space or NULL). F_space on success, but the character is whitespace.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B unicode
+A set of bytes representing a single codepoint character to process.
+
+.TP
+.B mode
+Designate the mode in which the curent state is being processed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcodepoint.h\fP(3), \fIutf8_convert_codepoint\fP(3), \fIutf8_convert_raw\fP(3), \fIutf8_detect_codepoint\fP(3), \fIutf8_process_file_codepoint\fP(3), \fIf_utf_is_whitespace()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_main.3 b/level_3/utf8/data/documentation/man/man3/utf8_main.3
new file mode 100644 (file)
index 0000000..ab19243
--- /dev/null
@@ -0,0 +1,37 @@
+.TH utf8_main "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_main \-
+.SH SYNOPSIS
+.nf
+.B #include <utf8.h>
+.sp
+\fBvoid utf8_main\fP(
+    \fButf8_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Execute main program.
+.PP
+F_signal_termination
+.PP
+This alters main.setting.state.status: F_okay on success. F_true on success when performing verification and verify passed. F_false on success when performing verification and verify failed.
+.PP
+F_interrupt (with error bit) on (exit) signal received. F_parameter (with error bit) if main is NULL or setting is NULL.
+.SH PARAMETERS
+.TP
+.B main
+The main program data and settings.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIutf8.h\fP(3), \fIutf8_main\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_main_delete.3 b/level_3/utf8/data/documentation/man/man3/utf8_main_delete.3
new file mode 100644 (file)
index 0000000..f8e11fc
--- /dev/null
@@ -0,0 +1,35 @@
+.TH utf8_main_delete "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_main_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid utf8_main_delete\fP(
+    \fButf8_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+De-allocate main program data.
+.PP
+Must not be NULL.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIutf8_main_delete\fP(3), \fIutf8_setting_delete\fP(3), \fIfll_program_data_delete()\fP, \fIutf8_setting_delete()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_bytesequence.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_bytesequence.3
new file mode 100644 (file)
index 0000000..2b65963
--- /dev/null
@@ -0,0 +1,94 @@
+.TH utf8_print_data_bytesequence "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_bytesequence \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_bytesequence\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the print data functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Print the byte sequence character (such as '豸').
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B sequence
+A byte sequences representing a single character to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_character_invalid.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_character_invalid.3
new file mode 100644 (file)
index 0000000..7e2687e
--- /dev/null
@@ -0,0 +1,94 @@
+.TH utf8_print_data_character_invalid "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_character_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_character_invalid\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIinvalid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an invalid character either as a Unicode codeblock or as a byte sequence.
+.PP
+This handles whether or not the invalid character should be printed or not based on program parameters.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B invalid
+The byte sequence string or unicode codepoint string representing a single character to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3), \fIutf8_print_combining_or_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_codepoint.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_codepoint.3
new file mode 100644 (file)
index 0000000..c3a6a7f
--- /dev/null
@@ -0,0 +1,67 @@
+.TH utf8_print_data_codepoint "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_codepoint \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_codepoint\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint32_t    \fP\fIcodepoint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the codepoint number as a codepoint string (such as U+8C78).
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B codepoint
+The codepoint to print. This is the code that represents a single character.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_combining_or_width.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_combining_or_width.3
new file mode 100644 (file)
index 0000000..2967afc
--- /dev/null
@@ -0,0 +1,92 @@
+.TH utf8_print_data_combining_or_width "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_combining_or_width \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_combining_or_width\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the width or combining state of the given character.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B sequence
+A byte sequences representing a single character to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3), \fIutf8_print_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_combining_or_width_invalid.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_combining_or_width_invalid.3
new file mode 100644 (file)
index 0000000..c488e74
--- /dev/null
@@ -0,0 +1,64 @@
+.TH utf8_print_data_combining_or_width_invalid "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_combining_or_width_invalid \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_combining_or_width_invalid\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print an error regarding the width or combining state of a some character.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_bytesequence.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_bytesequence.3
new file mode 100644 (file)
index 0000000..13d0060
--- /dev/null
@@ -0,0 +1,72 @@
+.TH utf8_print_data_raw_bytesequence "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_raw_bytesequence \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_raw_bytesequence\fP(
+    \fBfl_print_t *const  \fP\fIprint\fP,
+    \fBconst f_utf_char_t \fP\fIraw\fP,
+    \fBconst uint8_t      \fP\fIwidth\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the raw character data (binary / byte sequence).
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B raw
+The raw string in integer format.
+
+.TP
+.B width
+The width the raw character represents (a value inclusively from 1 to 4).
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_codepoint.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_codepoint.3
new file mode 100644 (file)
index 0000000..2c84699
--- /dev/null
@@ -0,0 +1,92 @@
+.TH utf8_print_data_raw_codepoint "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_raw_codepoint \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_raw_codepoint\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIraw\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the raw character data (codepoint).
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B raw
+The raw string already in codepoint format.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_combining_or_width.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_raw_combining_or_width.3
new file mode 100644 (file)
index 0000000..3bc1a99
--- /dev/null
@@ -0,0 +1,67 @@
+.TH utf8_print_data_raw_combining_or_width "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_raw_combining_or_width \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_raw_combining_or_width\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint8_t     \fP\fIwidth\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the width or combining state of the for a raw character.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B width
+The pre-calculated width.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3), \fIutf8_print_data_width()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_file.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_file.3
new file mode 100644 (file)
index 0000000..519b0d7
--- /dev/null
@@ -0,0 +1,97 @@
+.TH utf8_print_data_section_header_file "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_section_header_file \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_section_header_file\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_string_static_t   \fP\fIname\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the input file section header.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B name
+The name of the file.
+
+.TP
+.B index
+The index position of the file.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_parameter.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_parameter.3
new file mode 100644 (file)
index 0000000..358acb1
--- /dev/null
@@ -0,0 +1,67 @@
+.TH utf8_print_data_section_header_parameter "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_section_header_parameter \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_section_header_parameter\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the input parameter section header.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index position of the parameter.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_pipe.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_section_header_pipe.3
new file mode 100644 (file)
index 0000000..a18ddb7
--- /dev/null
@@ -0,0 +1,64 @@
+.TH utf8_print_data_section_header_pipe "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_section_header_pipe \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_section_header_pipe\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the input pipe section header.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_data_width.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_data_width.3
new file mode 100644 (file)
index 0000000..5e4168d
--- /dev/null
@@ -0,0 +1,92 @@
+.TH utf8_print_data_width "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_data_width \-
+.SH SYNOPSIS
+.nf
+.B #include <data.h>
+.sp
+\fBf_status_t utf8_print_data_width\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIsequence\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print the width of the given character.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+Designates the how and where to print.
+
+.TP
+.B sequence
+A byte sequences representing a single character whose width is to be printed.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIdata.h\fP(3), \fIutf8_print_data_bytesequence\fP(3), \fIutf8_print_data_character_invalid\fP(3), \fIutf8_print_data_codepoint\fP(3), \fIutf8_print_data_combining_or_width\fP(3), \fIutf8_print_data_combining_or_width_invalid\fP(3), \fIutf8_print_data_raw_bytesequence\fP(3), \fIutf8_print_data_raw_codepoint\fP(3), \fIutf8_print_data_raw_combining_or_width\fP(3), \fIutf8_print_data_section_header_file\fP(3), \fIutf8_print_data_section_header_parameter\fP(3), \fIutf8_print_data_section_header_pipe\fP(3), \fIutf8_print_data_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error.3
new file mode 100644 (file)
index 0000000..fbfb12c
--- /dev/null
@@ -0,0 +1,69 @@
+.TH utf8_print_error "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst f_string_t  \fP\fIfunction\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the print error functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Print generic error message regarding a function failing in some way.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B function
+The name of the function associated with the error.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIfll_error_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_decode.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_decode.3
new file mode 100644 (file)
index 0000000..1b9df47
--- /dev/null
@@ -0,0 +1,92 @@
+.TH utf8_print_error_decode "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_decode \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_decode\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_static_t \fP\fIinvalid\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message when attempt to decode the character failed.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B invalid
+The byte sequence string or unicode codepoint string representing a single character to print.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_encode.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_encode.3
new file mode 100644 (file)
index 0000000..6a08a82
--- /dev/null
@@ -0,0 +1,67 @@
+.TH utf8_print_error_encode "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_encode \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_encode\fP(
+    \fBfl_print_t *const \fP\fIprint\fP,
+    \fBconst uint32_t    \fP\fIcodepoint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message when attempt to encode the character failed.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B codepoint
+The codepoint that is invalid.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_file.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_file.3
new file mode 100644 (file)
index 0000000..6eb44ee
--- /dev/null
@@ -0,0 +1,132 @@
+.TH utf8_print_error_file "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_file \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_file\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst f_string_t        \fP\fIfunction\fP,
+    \fBconst f_string_static_t \fP\fIname\fP,
+    \fBconst f_string_static_t \fP\fIoperation\fP,
+    \fBconst uint8_t           \fP\fItype\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print file related error or warning messages.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B function
+(optional) The name of the function where the error happened.
+
+.TP
+.B name
+The name of the file or directory.
+
+.TP
+.B operation
+The operation that fails, such as 'create' or 'access'.
+
+.TP
+.B type
+A valid file type code from the fll_error_file_type enum.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_no_from.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_no_from.3
new file mode 100644 (file)
index 0000000..1ab3191
--- /dev/null
@@ -0,0 +1,64 @@
+.TH utf8_print_error_no_from "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_no_from \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_no_from\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when no sources are provided.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIfll_error_file_print()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_name_empty.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_name_empty.3
new file mode 100644 (file)
index 0000000..302f355
--- /dev/null
@@ -0,0 +1,67 @@
+.TH utf8_print_error_parameter_file_name_empty "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_parameter_file_name_empty \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_parameter_file_name_empty\fP(
+    \fBfl_print_t *const         \fP\fIprint\fP,
+    \fBconst f_number_unsigned_t \fP\fIindex\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when the file parameter is an empty string.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B index
+The index within the argv[] array where the empty string is found.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_not_found.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_not_found.3
new file mode 100644 (file)
index 0000000..a41b104
--- /dev/null
@@ -0,0 +1,97 @@
+.TH utf8_print_error_parameter_file_not_found "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_parameter_file_not_found \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_parameter_file_not_found\fP(
+    \fBfl_print_t *const       \fP\fIprint\fP,
+    \fBconst uint8_t           \fP\fIfrom\fP,
+    \fBconst f_string_static_t \fP\fIname\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when no sources are provided in the main program parameters.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.TP
+.B from
+If TRUE, then this is a from file (source file). If FALSE, then this is a to file (destination file).
+
+.TP
+.B name
+The file path name.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIfl_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_to_too_many.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_error_parameter_file_to_too_many.3
new file mode 100644 (file)
index 0000000..6cfa71e
--- /dev/null
@@ -0,0 +1,64 @@
+.TH utf8_print_error_parameter_file_to_too_many "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_error_parameter_file_to_too_many \-
+.SH SYNOPSIS
+.nf
+.B #include <error.h>
+.sp
+\fBf_status_t utf8_print_error_parameter_file_to_too_many\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Print error message for when too many 'to' destinations are specified.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIerror.h\fP(3), \fIutf8_print_error\fP(3), \fIutf8_print_error_decode\fP(3), \fIutf8_print_error_encode\fP(3), \fIutf8_print_error_file\fP(3), \fIutf8_print_error_no_from\fP(3), \fIutf8_print_error_parameter_file_name_empty\fP(3), \fIutf8_print_error_parameter_file_not_found\fP(3), \fIutf8_print_error_parameter_file_to_too_many\fP(3), \fIfll_print_format()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_print_message_help.3 b/level_3/utf8/data/documentation/man/man3/utf8_print_message_help.3
new file mode 100644 (file)
index 0000000..76b5f51
--- /dev/null
@@ -0,0 +1,66 @@
+.TH utf8_print_message_help "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_print_message_help \-
+.SH SYNOPSIS
+.nf
+.B #include <message.h>
+.sp
+\fBf_status_t utf8_print_message_help\fP(
+    \fBfl_print_t *const \fP\fIprint\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the print functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Print help.
+.PP
+This does not alter print.custom.setting.state.status.
+.PP
+F_output_not (with error bit) if setting is NULL.
+.SH PARAMETERS
+.TP
+.B print
+The output structure to print to.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Structure for facilitating colored or other managed printing.
+.PP
+custom: A pointer to a data structure determined by some caller for more advanced manipulation.
+.sp
+.RS
+.nf
+\fB
+struct fl_print_t {
+  f_file_t                \fIto\fP;
+  uint8_t                 \fIverbosity\fP;
+  uint64_t                \fIflag\fP;
+  f_string_static_t       \fIprefix\fP;
+  f_string_static_t       \fIsuffix\fP;
+  f_color_set_t           \fIcontext\fP;
+  f_color_set_t           \fInotable\fP;
+  f_color_set_context_t  *\fIset\fP;
+  void                   *\fIcustom\fP;
+};
+\fP
+.fi
+.RE
+.SH RETURN VALUE
+.PP
+F_okay on success. F_output_not on success, but no printing is performed.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fImessage.h\fP(3), \fIutf8_print_message_help\fP(3), \fIf_file_stream_flush()\fP, \fIf_file_stream_lock()\fP, \fIf_file_stream_unlock()\fP, \fIf_print_dynamic_raw()\fP, \fIfl_print_format()\fP, \fIfll_program_print_help_header()\fP, \fIfll_program_print_help_option()\fP, \fIfll_program_print_help_option_standard()\fP, \fIfll_program_print_help_usage()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_process_file_bytesequence.3 b/level_3/utf8/data/documentation/man/man3/utf8_process_file_bytesequence.3
new file mode 100644 (file)
index 0000000..10f6890
--- /dev/null
@@ -0,0 +1,60 @@
+.TH utf8_process_file_bytesequence "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_process_file_bytesequence \-
+.SH SYNOPSIS
+.nf
+.B #include <bytesequence.h>
+.sp
+\fBvoid utf8_process_file_bytesequence\fP(
+    \fButf8_main_t *const \fP\fImain\fP,
+    \fBconst f_file_t     \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process file as a bytesequence input, handling conversion or verification as appropriate.
+.PP
+This alters setting.state.status: F_true on success and is valid. F_false on success and contains invalid sequences. F_interrupt on (exit) signal received.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B file
+The file stream to process. This file may contain NULLs.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIbytesequence.h\fP(3), \fIutf8_convert_bytesequence\fP(3), \fIutf8_process_file_bytesequence\fP(3), \fIutf8_convert_bytesequence()\fP, \fIutf8_detect_codepoint()\fP, \fIfll_program_standard_signal_received()\fP, \fIutf8_convert_bytesequence()\fP, \fIutf8_detect_codepoint()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_process_file_codepoint.3 b/level_3/utf8/data/documentation/man/man3/utf8_process_file_codepoint.3
new file mode 100644 (file)
index 0000000..9bd81de
--- /dev/null
@@ -0,0 +1,60 @@
+.TH utf8_process_file_codepoint "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_process_file_codepoint \-
+.SH SYNOPSIS
+.nf
+.B #include <codepoint.h>
+.sp
+\fBvoid utf8_process_file_codepoint\fP(
+    \fButf8_main_t *const \fP\fImain\fP,
+    \fBconst f_file_t     \fP\fIfile\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Process file as a codepoint input, handling conversion or verification as appropriate.
+.PP
+This alters setting.state.status: F_true on success and is valid. F_false on success and contains invalid sequences. F_interrupt on (exit) signal received.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B file
+The file stream to process. This file may contain NULLs.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Commonly used file related properties.
+.PP
+size_write: The default number of 1-byte characters to read at a time and is often used for the write buffer size.
+.sp
+.RS
+.nf
+\fB
+struct f_file_t {
+  FILE    *\fIstream\fP;
+  int      \fIid\fP;
+  int      \fIflag\fP;
+  size_t   \fIsize_read\fP;
+  size_t   \fIsize_write\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcodepoint.h\fP(3), \fIutf8_convert_codepoint\fP(3), \fIutf8_convert_raw\fP(3), \fIutf8_detect_codepoint\fP(3), \fIutf8_process_file_codepoint\fP(3), \fIutf8_convert_bytesequence()\fP, \fIutf8_detect_codepoint()\fP, \fIfll_program_standard_signal_received()\fP, \fIutf8_convert_bytesequence()\fP, \fIutf8_detect_codepoint()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_process_text.3 b/level_3/utf8/data/documentation/man/man3/utf8_process_text.3
new file mode 100644 (file)
index 0000000..413395e
--- /dev/null
@@ -0,0 +1,66 @@
+.TH utf8_process_text "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_process_text \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid utf8_process_text\fP(
+    \fButf8_main_t *const \fP\fImain\fP,
+    \fBf_string_static_t  \fP\fItext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the process functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Convert the text from one format to other another format or verify text.
+.PP
+This alters setting.state.status: F_true on success and is valid. F_false on success and contains invalid sequences. F_interrupt on (exit) signal received.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.TP
+.B text
+This represent a single text data. This text is NULL terminated and can therefore not contain any NULLs.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIutf8_process_text\fP(3), \fIutf8_process_text_width\fP(3), \fIutf8_convert_bytesequence()\fP, \fIutf8_convert_codepoint()\fP, \fIutf8_detect_codepoint()\fP, \fIutf8_convert_bytesequence()\fP, \fIutf8_convert_codepoint()\fP, \fIutf8_detect_codepoint()\fP, \fIutf8_signal_received()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_process_text_width.3 b/level_3/utf8/data/documentation/man/man3/utf8_process_text_width.3
new file mode 100644 (file)
index 0000000..f70dcc3
--- /dev/null
@@ -0,0 +1,59 @@
+.TH utf8_process_text_width "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_process_text_width \-
+.SH SYNOPSIS
+.nf
+.B #include <process.h>
+.sp
+\fBvoid utf8_process_text_width\fP(
+    \fBf_string_static_t  *\fP\fItext\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Populate the text used and size based on the string.
+.PP
+The used represents the actual length of the character in bytes. The size represents the expected length of the character in bytes.
+.SH PARAMETERS
+.TP
+.B text
+The character data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+A string that is analogous to f_string_dynamic_t but intended for static-only uses.
+.PP
+The f_string_static_t type should always have size set to 0 to represent that it is a static string. This allows for easier integration with f_string_dynamic_t.
+.PP
+If size is set to some value other than 0 for a static string, then take special care not to intermix it with f_string_dynamic_t.
+.PP
+A special macro_f_string_static_t_initialize_1() is provided to easily initialize a static string. A special macro_f_string_static_t_initialize_2() is provided to easily initialize a static string with an identical used and size.
+.PP
+size: Total amount of space available.
+.sp
+.RS
+.nf
+\fB
+struct f_string_static_t {
+  f_string_t          \fIstring\fP;
+  f_number_unsigned_t \fIused\fP;
+  f_number_unsigned_t \fIsize\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIprocess.h\fP(3), \fIutf8_process_text\fP(3), \fIutf8_process_text_width\fP(3)
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_setting_delete.3 b/level_3/utf8/data/documentation/man/man3/utf8_setting_delete.3
new file mode 100644 (file)
index 0000000..e8da95b
--- /dev/null
@@ -0,0 +1,66 @@
+.TH utf8_setting_delete "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_setting_delete \-
+.SH SYNOPSIS
+.nf
+.B #include <type.h>
+.sp
+\fBvoid utf8_setting_delete\fP(
+    \fButf8_setting_t *const \fP\fIsetting\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Delete the program main setting data.
+.PP
+Must not be NULL.
+.PP
+This does not alter setting.state.status.
+.SH PARAMETERS
+.TP
+.B setting
+The program main setting data.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+The utf8 main program settings.
+.PP
+This is passed to the program-specific main entry point to designate program settings. These program settings are often processed from the program arguments (often called the command line arguments).
+.PP
+remaining: An array containing all remaining arguments passed to the program.
+.sp
+.RS
+.nf
+\fB
+struct utf8_setting_t {
+  uint8_t             \fImode\fP;
+  uint16_t            \fIflag\fP;
+  f_state_t           \fIstate\fP;
+  f_color_set_t       \fIvalid\fP;
+  f_color_set_t       \fIvalid_not\fP;
+  f_string_static_t   \fIappend\fP;
+  f_string_static_t   \fIprepend\fP;
+  f_string_dynamic_t  \fIbuffer\fP;
+  f_string_dynamic_t  \fItext\fP;
+  f_string_dynamics_t \fIpath_files_from\fP;
+  f_string_dynamics_t \fIpath_files_to\fP;
+  f_string_dynamics_t \fIremaining\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fItype.h\fP(3), \fIutf8_main_delete\fP(3), \fIutf8_setting_delete\fP(3), \fIf_memory_array_resize()\fP, \fIf_memory_arrays_resize()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_setting_load.3 b/level_3/utf8/data/documentation/man/man3/utf8_setting_load.3
new file mode 100644 (file)
index 0000000..49d91fd
--- /dev/null
@@ -0,0 +1,68 @@
+.TH utf8_setting_load "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_setting_load \-
+.SH SYNOPSIS
+.nf
+.B #include <common.h>
+.sp
+\fBvoid utf8_setting_load\fP(
+    \fBconst f_console_arguments_t \fP\fIarguments\fP,
+    \fButf8_main_t *const          \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides the common functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Perform the standard program setting load process.
+.PP
+This prints error messages as appropriate.
+.PP
+If either main or setting is NULL, then this immediately returns without doing anything.
+.PP
+This alters main.setting.state.status: F_okay on success.
+.PP
+Errors (with error bit) from: f_console_parameter_process(). Errors (with error bit) from: fll_program_parameter_process_context_standard().
+.SH PARAMETERS
+.TP
+.B arguments
+The parameters passed to the process (often referred to as command line arguments).
+
+.TP
+.B main
+The main program data and settings.
+
+.SH STRUCTURES
+.SS ""
+.PP
+.sp
+.PP
+Provide a helper structure for referencing the argc and argv standard main arguments.
+.PP
+This is intended to only store the argc and argv and should not be treated as dynamic.
+.PP
+macro_f_console_arguments_t_initialize_1() initializes the structure.
+.sp
+.RS
+.nf
+\fB
+struct f_console_arguments_t {
+  const f_number_unsigned_t \fIargc\fP;
+  const f_string_t         *\fIargv\fP;
+  const f_string_t         *\fIenvp\fP;
+};
+\fP
+.fi
+.RE
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIcommon.h\fP(3), \fIutf8_setting_load\fP(3), \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP, \fIf_console_parameter_process()\fP, \fIfll_program_parameter_process_context_standard()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_signal_handler.3 b/level_3/utf8/data/documentation/man/man3/utf8_signal_handler.3
new file mode 100644 (file)
index 0000000..64678b2
--- /dev/null
@@ -0,0 +1,43 @@
+.TH utf8_signal_handler "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_signal_handler \-
+.SH SYNOPSIS
+.nf
+.B #include <signal.h>
+.sp
+\fBvoid utf8_signal_handler\fP(
+    \fButf8_main_t *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides signal functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Signal handler for signals/interrupts.
+.PP
+This blocks until an expected signal is recieved. When an expected signal is received it then sets the
+.PP
+F_signal_termination
+.PP
+Must not be NULL.
+.PP
+This alters main.program.signal_received, setting it to a received signal. This alters main.program.signal_status.
+.PP
+This does not alter main.setting.state.status.
+.SH PARAMETERS
+.TP
+.B main
+The main program and settings data.
+
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIsignal.h\fP(3), \fIutf8_signal_handler\fP(3), \fIf_signal_set_add()\fP, \fIf_signal_set_empty()\fP, \fIfll_program_standard_signal_received_wait()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.
diff --git a/level_3/utf8/data/documentation/man/man3/utf8_thread_signal.3 b/level_3/utf8/data/documentation/man/man3/utf8_thread_signal.3
new file mode 100644 (file)
index 0000000..995d335
--- /dev/null
@@ -0,0 +1,40 @@
+.TH utf8_thread_signal "3" "January 2026" "FLL - UTF8 0.8.0" "Program Functions"
+.SH "NAME"
+utf8_thread_signal \-
+.SH SYNOPSIS
+.nf
+.B #include <thread.h>
+.sp
+\fBvoid * utf8_thread_signal\fP(
+    \fBvoid *const \fP\fImain\fP
+);
+.fi
+.SH DESCRIPTION
+.PP
+Provides thread functionality.
+.PP
+This is auto-included and should not need to be explicitly included. Thread handler for signals/interrupts.
+.PP
+F_signal_termination
+.PP
+Must be of type utf8_main_t.
+.SH PARAMETERS
+.TP
+.B main
+The program and settings data.
+
+.SH RETURN VALUE
+.PP
+0, always.
+.SH SEE ALSO
+.PP
+.nh
+.ad l
+\fIthread.h\fP(3), \fIutf8_thread_signal\fP(3), \fIutf8_main_t\fP, \fIf_thread_cancel_state_set()\fP, \fIutf8_signal_handler()\fP
+.ad
+.hy
+.SH AUTHOR
+Written by Kevin Day.
+.SH COPYRIGHT
+.PP
+Copyright \(co 2007-2026 Kevin Day, GNU LGPL Version 2.1 or later.